mysql基本操作

SQL的基本规则


1)SQL 语句要以分号(;)\G结尾
RDBMS (关系型数据库)当中,SQL 语句是逐条执行的,一条 SQL 语句代表着数据库的一个操作。我们通常在句子的句尾加注标点表示这句话结束,中文句子以句号。结尾,英文以点号.结尾,而 SQL 语句则使用英文分号;结尾。

2)SQL 语句不区分大小写
SQL 不区分关键字的大小写。例如,不管写成 SELECT 还是 select,解释都是一样的。表名和列名也是如此。

提示:关键字是数据库事先定义的,有特别意义的单词。
虽然可以根据个人喜好选择大写还是小写(或大小写混杂),但为了理解起来更加容易。
关键字大写
数据库名、表名和列名等小写

需要注意的是,插入到表中的数据是区分大小写的。例如,向数据库中插入单词 Computer、COMPUTER computer,这三个是不一样的数据。

 

基本sql语句之库操作

# 增
   create database db;
   create database db chasret="gbk";
# 查
   show databases;
   show create database db;
# 改
   alter database db chasret="utf8"; # 修改编码
# 删
   drop database db;

基本sql语句之表库操作

"""
操作表(文件)的时候,需要指定所在库(文件夹)

1.查看当前所在库名称
select database();
2.切换数据库
use 数据库名称;
"""
查看当前所在库名称
select database;

# 增
create table t1(id int,name char(4)); # 创建表一定要给字段
# 查
   show tables;
   show create table t1;
   describle t1; #(简写:desc t1;)
# 改
alter table t1 modify name char(16);
# 删
drop table t1;

基本sql语句之表库操作

# 增
insert into table t1(1,"lhs"),(2,"jason"); # 在t1表中新增两行(必须按照表的规范)

   select * from t1; # 查看t1中所有数据
   如果数据太多会出现一页显示不全的问题,我们可以只查找我们需要的数据;
   select id,name from t1; # 也可以通过库民.表名的方式跨库查找 eg:select name from db1.t2;
   '''如果字段过多导致展示错乱,还可以使用\G结尾来进行分行显示'''

# 改
   update 表名 set 字段名=新值 where 字段名=存在的值  # where筛选条件
   update t1 set name="lhs" where name="qq";
# 删
delete from 表名 where 字段名=存在的值

存储引擎

"""
简单的理解为:存储引擎就是处理数据底层逻辑,不同的引擎底层处理方式有所不同
"""

# 查看存储引擎信息
show engines;
   
# 需要掌握的有四个
MyISAM
  是MySQL5.5版本之前默认的存储引擎
      该引擎存取数据的速度都很快
           但是安全性较低 不支持很多额外的功能
   InnoDB
  是MySQL5.5版本之后默认的存储引擎
      该引擎支持事务、行级锁、外键
           存取数据的速度没有MyISAM快但是功能和安全性更高
   
   
   这两个数据都是存在内存中
   memory
  数据全部存储在内存中 速度很快但是断电立刻丢失
   blackhole
  黑洞 任何放入其中的数据都会消失(类似于垃圾处理站)
   
# 比较存储引擎之间的差异
'''创建表可以指定存储引擎
create table t1(id int) engine=存储引擎;
'''
create table t2(id int) engine=MyISAM;
create table t3(id int) engine=InnoDB;
create table t4(id int) engine=memory;
create table t5(id int) engine=blackhole;

# 不同存储引擎文件后缀名
MyISAM
三个文件
      .frm 表结构
          .MYD 表数据
          .MYI 表索引
  InnoDB
两个文件
  .frm 表结构
      .ibd     数据与索引
  memory
.frm 表结构
  blackhole
.frm 表结构

# 插入数据演示
insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1);
insert into t5 values(1);

创建表的完整语法

create table 表名(字段名1 字段类型(数字)约束条件,
字段名2 字符类型(数字)约束条件,
  字段名3 字符类型(数字)约束条件)

# 注意事项
1.字段名和字段类型是必须的 数字和约束条件是可选
   2.约束条件可以有多个
   3.最后一个字段结尾不能有逗号(容易出错)

 

数据类型

# 整形
1bytes=8bit
   
   分类: 默认范围
tinyint 1bytes -128〜127   0 〜255
   smallint 2bytes -32768〜32767    0〜65535
   mediumint 3bytes -8388608〜8388607 0〜16777215
   int 4bytes -2147483648〜2147483647 0〜4294967295
   bigint 8bytes -9223372036854775808〜9223372036854775807 0〜18446744073709551615
   
'''不同类型的int能够存储的数字范围不一样'''
# 验证不同类型的int是否会空出一个存储正负号
   create table t7(id tinyint);
   insert into t7 values(256),(-129);
   
   create table t7(id tinyint unsigned);
   insert into t7 values(256),(-129);
   mysql> insert into t6 values(-2002),(260);
   Query OK, 2 rows affected, 2 warnings (1.76 sec)
   Records: 2  Duplicates: 0  Warnings: 2

   mysql> select * from t6;
   +------+
   | id   |
   +------+
   | -128 |
   |  127 |
   +------+
   2 rows in set (0.00 sec)
   
   # 得出结论:tinyint默认就会空出一位存储正负号
   """其实所有的int类型默认都是空出一位存储正负号"""
   
   #修改默认的范围
   unsigned把默认的(-128〜127)修改至(0 〜255)
   
   create table t7(id tinyint unsigned);
   insert into t7 values(256),(-129);
   
   
# MySQL小数类型


MySQL 中使用浮点数和定点数来表示小数。
"""
浮点类型有两种,分别是单精度浮点数(FLOAT)和双精度浮点数(DOUBLE);定点类型只有一种,就是 DECIMAL。
浮点类型和定点类型都可以用(M, D)来表示,其中M称为精度,表示总共的位数;D称为标度,表示小数的位数。

浮点数类型的取值范围为 M(1~255)和 D(1~30,且不能大于 M-2),分别表示显示宽度和小数位数。M 和 D 在 FLOAT 和DOUBLE 中是可选的,FLOAT 和 DOUBLE 类型将被保存为硬件所支持的最大精度。DECIMAL 的默认 D 值为 0、M 值为 10。

下表中列出了 MySQL 中的小数类型和存储需求。
类型名称 说明 存储需求
FLOAT 单精度浮点数 4 个字节
DOUBLE 双精度浮点数 8 个字节
DECIMAL (M, D) 压缩的“严格”定点数 M+2 个字节

DECIMAL 类型不同于 FLOAT 和 DOUBLE。DOUBLE 实际上是以字符串的形式存放的,DECIMAL 可能的最大取值范围与 DOUBLE 相同,但是有效的取值范围由 M 和 D 决定。如果改变 M 而固定 D,则取值范围将随 M 的变大而变大。

从上表中可以看到,DECIMAL 的存储空间并不是固定的,而由精度值 M 决定,占用 M+2 个字节。

FLOAT 类型的取值范围如下:
● 有符号的取值范围:-3.402823466E+38~-1.175494351E-38。
● 无符号的取值范围:0 和 -1.175494351E-38~-3.402823466E+38。

DOUBLE 类型的取值范围如下:
● 有符号的取值范围:-1.7976931348623157E+308~-2.2250738585072014E-308。
● 无符号的取值范围:0 和 -2.2250738585072014E-308~-1.7976931348623157E+308。
"""

float(255,30)
总共255位小数位占30位
double(255,30)
总共255位小数位占30位
decimal(65,30)
总共65位小数占30位

create table t8(id float(255,30));
       
'''三者精确度不同
decimal > double > float
具体使用结合实际情况
'''

# 字符类型
char(4)  # 定长
  最多存储四个字符 超出了则报错 没超出则用空格填充
   varchar(4)  # 变长
  最多存储四个字符 超出了则报错 没超出有几个存几个
   create table t11(id int,name char(4));
   create table t12(id int,name varchar(4));
   insert into t11 values(1,'jason');
   insert into t12 values(1,'jason');

SQL_MODE

1.模糊查询
show variables like '%mode%';
2.修改配置文件
set session sql_mode = 'strict_trans_tables'
   set global sql_mode = 'strict_trans_tables' # 全局修改

研究数字在数字类型与字符类型中的区别

# 验证数字在数字类型中是否是用来限制存储长度
create table t13(id int(3));
   insert into t13 values(111111);

'''数字在数字类型中并不是用来限制存储长度 而是用来控制展示长度'''
create table t14(id int(8) unsigned zerofill);
   insert into t14 values(1111);
   insert into t14 values(111111111);
结论:以后遇到数字类型不要指定数字 让他使用自带的即可
   create table t15(id int);

char与varchar差异

# 1.验证char定长特性
create table t16(id int,name char(5));
   insert into t16 values(1,'tom');
   create table t17(id int,name varchar(5));
   insert into t17 values(1,'tom');

1.统计某个字段数据对应的长度
char_length()
2.上述方法还是无法验证 需要先取消底层优化操作
set global sql_mode='strict_trans_tables,pad_char_to_full_length'
 
# 2.到底哪个好
char
  优势:整存整取 速度快
    劣势:浪费存储空间
   varchar
  优势:节省存储空间
  劣势:存取数据的时候都需要先考虑报头 速度较于char慢
   char(6)  varchar(6)
   1bytes+jason1bytes+tony1bytes+jack1bytes+kevin

基本数据类型之日期相关

# 格式

date 年月日
datetime 年月日时分秒
time 时分秒
year

create table t1(id int comment "编号",
               name varchar(32) comment "姓名",
               data1 date comment "数据1",
               data2 datetime comment "数据2",
               data3 time comment "数据3",
               data4 year comment "数据4");

mysql> insert into t1 values(1,"jason","2021-11-10","2021-11-10 19:54:28","19:54:28","2021");
Query OK, 1 row affected (0.08 sec)

mysql> select * from t1;
+------+-------+------------+---------------------+----------+-------+
| id   | name  | data1      | data2               | data3    | data4 |
+------+-------+------------+---------------------+----------+-------+
|    1 | jason | 2021-11-10 | 2021-11-10 19:54:28 | 19:54:28 |  2021 |
+------+-------+------------+---------------------+----------+-------+
1 row in set (0.00 sec)
# 注:comment无实际意义,类似于注释的说明

基本数据类型之枚举与集合类型

# 枚举
多选一 关键字"enum"
   
"提前定义好的数据后期录入只能按照之前输入的内容,比如说性别,提前规定好后,输入其他数据会报错"
create table t2(
  id int,
               name varchar(8),
               gender enum("male","female","others")
              );
insert into t2 values(1,"jason","male"); # 正常
insert into t1 values(2,'kevin','男');    # 报错


# 集合
多选 关键字"set"
   
   create table t3(id int,
                   name char(8),
                   hobbies set("read","music","basketball","swimming"));
insert into t3 values(1,"jason","music,dance"); # 报错
   insert into t3 values(2,"jason1","music,swimming"); # 正常

 

 

 

posted @ 2021-11-10 22:22  一叶松  阅读(25)  评论(0编辑  收藏  举报