存储引擎
-
- innodb
- 是mysql5.5版本及以后默认的存储引擎
- 存储数更加的安全
- myisam
- 是mysql5.5版本之前默认的存储引擎
- 熟读比innodb更快,但是我们更注重的是数据的安全
- memory
- 内存引擎(数据全部存放于内存中)
- 断电则数据丢失
- blackhole
- 无论存什么,都立刻消失(黑洞引擎)
- innodb
- 创建表的完整语法
- 创建表首先需要切换到库下面:use qing; --切换到库qing下面进行操作,该命令可省略;分号
- create table 表名(字段名1 类型(宽度) 字段名2 类型(宽度) 约束条件);
t3
-
- 简写:create table 表名(字段名(id) 类型(int),字段名(name) 类型(char)(宽度));
use
-
- 修改表名
mysql
-
- 宽度
一般情况下指的是对存储数据的限制
-
- 宽度和约束条件到底是什么关系
- 宽度是用来限制数据的存储
- 约束个条件是在宽度的基础之上增加的额外的约束
- 宽度和约束条件到底是什么关系
整型
- 分类
- TINYINT
- SAMLLINT
- MEDUIMINT
- INT
- BIGINT
- 作用
- 存储年龄
- 等级
- id
- 号码等等
- 以TINYINT为例
mysql
-
- tinyint默认情况下是带符号的
- 超出限制只会存最大的可接收值
mysql
-
- int默认是带符号存储的
- 整型默认情况下都是带有符号的
mysql
-
- 特例>>只有整型的括号里面的数字是表示显示宽度,而不是限制位数
- id int(8);
- 如果数字没有超过8位,那么默认用空格填充至8位
- 如果数字超出了8位,那么有几位就存几位(但是也遵守最大范围)
mysql
-
- 总结:针对整型字段,括号内无需指定宽度,因为它默认的宽度足够显示所有的数据了
严格模式
- show variables like "%mode"; -- 查看严格模式
mysql
- like "%mode"模糊匹配查询
- 关键字like
- %:匹配任意多个字符>>>多个任意字符mode
- _:匹配任意单个字符>>>一个任意字符mode
- 修改严格模式
- set session -- 只在当前窗口有效
- set global -- 全局有效
- set global sql_mode='STRICT_TRANS_TABLES'; -- 修改成严格模式
mysql
-
- 在修改完成后,重新进入服务端即可
mysql
浮点型
- 分类
- FLOAT
- DOUBLE
- DECIMAL
- 作用
- 记录身高
- 体重
- 薪资
- 存储限制
- float(255,30) 总共255位 ,小数部分最多占30位
- double(255,30) 总共255位,小数部分最多占30位
- decimal(65,30) 总共65位,小数部分最多占30位
- 精确度
- create table t1(id float(255,30));
- create table t2(id double(255,30));
- create table t3(id decimal(65,30));
- insert into t1 values(1.11111111111111111111);
- insert into t2 values(1.11111111111111111111);
- insert into t3 values(1.11111111111111111111);
mysql
-
- 精确度>>>:folat<double<decimal
- 结合实际场景三者都能用,精确度最差的float也可以精确到小数点后7位,和我们小学圆周率的精确度一样:3.1415926
字符类型
- 分类
- char(差,请忽略) -- 定长(4) 数据超过四个字符直接报错,不够四个字符使用空格补全
- varchar(窝差,请忽略) -- 变长(4) 数据超过四个字符直接报错,不够四个字符有几个存几个
- 使用
- create table t1(name char(4));
- create table t2(name varchar(4));
- insert into t1 values('a');
- insert into t2 values('a');
mysql
-
-
- char_length统计字段长度
- select char_length(name) from t1;
- select char_length(name) from t2;
- char_length统计字段长度
-
mysql
-
-
- 首先可以确定char硬盘上存的绝对是真正的数据,但是字符两端带有空格的,在显示的时候MySQL会自动将多余的空格剔除
- 再次修改sql_mode 让MySQL不要做自动剔除操作
- set globdl sql_mode='STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';
-
mysql
-
- char与varchar对比
- char
- 缺点:浪费空间
- 优点
- 存取都很简单
- 直接按照固定的字符存取数据即可
- jason egon alex wusir tank
- 存按照五个字符存 取也直接按照五个字符取
- varchar
- 优点:节省空间
- 缺点:
- 存取比较麻烦
- 1bytes+jason
- 1bytes+egon
- 1bytes+alex
- 1bytes+tank
- 存的时候需要制作报头
- 取的时候也需要先读取报头,之后才能读取真正数据
- char
- char与varchar对比
时间类型
- year:>>>YYYY(1901/2155)
- 2020
- date:>>>YYYY-MM-DD(1000-01-01/9999-12-31)
- 2020-09-02
- time:>>>HH:MM:SS('-838:59:59'/'838:59:59')
- 20:23:36
- datetime:>>>>YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y)
- 2020-09-02 20:23:36
- timestamp:>>>YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)
- 2020-09-02 20:23:36
创建表3
- 日期应用
创建
- datetime与timestamp的区别
在实际应用的很多场景中
枚举类型与集合类型
- 分类
- 枚举 enum 多选一
- 集合set 多选多
- 具体使用
mysql
总结
- 字段类型
- 严格模式
- 约束条件
- not null -- 不能为空
- zerofill -- 如果值长度不够,在前面补0表示。windows没效果,linux环境下可以看出来
- unsigned -- 无符号(不存符号),既为非负数,用此类型可以增加数据长度一倍