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:

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

但同样如果输入了一个没有提前设置好的值同样会报错
针对数字类型 宽度并不是用来限制存储长度而是用来表示展示长度
在定义数字的时候无需手动添加宽度
约束条件
unsigned 无符号
zerofill 0填充

插入数据的第二种方式:
insert into t1(id或者name) values()

not null:
指不能为空 的约束条件

default 默认值

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


默认值的类型要前后一致.int 要对应数字,varchar 对应字符串
unique 单列唯一
在创建表的过程中后面加入 unique 即可

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


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

浙公网安备 33010602011771号