MySQL完整语法

存储引擎

存储引擎类型

MySQL内部针对数据有很多存储方式,不同的存储方式就是不同的使用了不同的存储引擎.

可以通过 show engins;来查看MySQL各类存储引擎,

 主要四种存储引擎:

InnoDB:

MySQL5.5版本之后的默认的存储引擎,

 支持事务,行锁,外键 可以保证数据更安全

事务可以保证操作数据要么全部完成要么全部失败,

行锁可以给每一行数据加锁,同一时间内只能有一个人操作.

MyISAM:

MySQL5.5版本之前的默认的存储引擎.

相比innoDB数据安全性较低,不支持事务,行锁等.

但是存储速度比InnoDB快.

memory:

数据直接存储在内存,速度快但是一旦断电,会造成数据的丢失

blackhole:

写入其中的数据都会丢失.

存储引擎表文件

create table t1(id int)engine=innodb

  create table t2(id int )engine =myisam

  create table t3(id int)engine =memory(只有表结构)

 create table t4(id int)engine=blackhole(只有表结构)

 

 将记录加入这四个表时,用innodb和myisam以及memory存储的方式的数据会存在,当重启mysql客户端后,用memory的数据会消失,

用blackhole的数据不存在.

创建表的完整语法

create table 表名(字段名 字段类型(宽度) 约束条件,

                            字段名 字段类型(宽度) 约束条件,

                            字段名 字段类型(宽度) 约束条件

                                                                                     );

字段名和字段类型是必须的,宽度和约束条件可选,

约束条件可选,并且一个字段名支持多个约束条件,

最后一个结尾的字段语句不能有逗号

字段类型

整形(不同整形类型能够存储的数字范围不同)

tinyint

smallint

int

bigint

 整形会自带正负号,也包括其他类型

  可以通过加 unsigned 取消正负号

 浮点型(不同的浮点型存储小数的范围和精确度不一样)

float 

 double

 decimal

  由此可见

 精确度:float < double < decimal

但在平时存数据会用字符类型,因为字符串类型根本不存在精准度这一个说法.

字符类型

char 

varchar

区别在于

char(4)

最多可以存储四个字符,如果打开了严格模式超过了则报错,没有超过也按照四个字符存储,用空格填充

  varchar(4)

最多可以存储四个字符,如果打开了严格模式超过了则报错,没有超过则按照实际字符数存储

  但是默认情况下MySQL会自动填充存储并在查询的时候自动去除填充的空格

 

 通过set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";改配置 

 关于严格模式

查看严格模式

show variables like '%mode%';

 修改严格模式

set global sql_mode = 'strict_trans_tables';

只需要退出客户端重新进入即可

 char 优势:整存整取,速度快

         劣势:浪费存储空间

varchar 优势:节省存储空间

             劣势:存取速度比charma慢

以tomjsonjackosca为例

这些人名用char(4)存取

存的时候是四个字符的存,取也是四个字符的取,不够四个的它会自动加空格填到4个

如果用varchar(4)存取

 不超出4个有几个存几个,但是在取数据的时候会全部取出,导致数据没有做分割

所以varchar在存取数据时,会在每个数据前面额外加一个数据,1bytes+tom jsonjackosca

用来计算,数据长度,读取时就读取前面这个数据,所以它在存取时速度会慢

时间类型

date年月日

time时分秒

Datetime年月日时分秒

 Year年

create table student(
      id int,
      name char(16),
      born_year year,
      birth date,
      study_time time,
      reg_time datetime
);
insert into student values(1,'jason','2022','2022-05-09','11:11:00','2022-11-11 11:11:11');

 枚举与集合类型

enum 多选一

set     多选多(也可以多选一)

枚举 enum:

当插入记录的词不在创建表的范围中,会报错

 插入数据时只能插入提前规定好的值.

集合set:

 可以进行多选,也可以单选

 但同样如果输入了一个没有提前设置好的值同样会报错

宽度说明

int(4) char(4)

 针对数字类型 宽度并不是用来限制存储长度而是用来表示展示长度

在定义数字的时候无需手动添加宽度

约束条件

unsigned  无符号

zerofill    0填充

 插入数据的第二种方式:

insert into t1(id或者name) values()

 not null:

指不能为空 的约束条件

  default  默认值

 就是定义了一个默认值,当不给这个值传实参时,则使用这个默认值.

 

 默认值的类型要前后一致.int 要对应数字,varchar 对应字符串

 unique  单列唯一

在创建表的过程中后面加入 unique 即可

 如果加了unique 在重复创建了相同的名字,那么就会报错

多列唯一:

 

 只要组合不出现两个相同的就不会报错

posted @ 2021-09-05 12:56  查无此人cxc  阅读(155)  评论(0)    收藏  举报