一、存储引擎
存储引擎标志表的性质不一样,使用的特点不一样
表中存储数据的格式就是存储引擎
表的存储方式:表结构存在一个地方,数据存在另一个地方。
表的零另一种存储方式:表结构存在硬盘了,数据存在内存里,断电消失,但是速度快。
查看存储引擎命令
show engines;
创建表的时候指定 engine = '存储引擎';
InnoDB(默认使用)
内部数据产生了两种表,一张是frame表结构,另一张是data表
mysql5.6 默认的存储引擎
事务:操作一段代码有一定的相关性,开启事务,若失败了就会进行数据回滚,保证数据的安全
处理事务的步骤
① 开启事务
② 更新A的数据
③ 更新B的数据
④ 关闭事务
特点:事务没完成,会回滚;避免了数据不安全
行级锁
多个用户不能同时对同一个数据进行修改,可以同时修改同一张表,
当频繁修改数据,就选用InnoDB引擎,只有InnoDB独有
表级锁
多个用户不能同时修改同一张表的数据只能查,myisam独有
MyISAM
内部数据产生了三张表,一张是frame表,一张是data表,一张是index索引表(有索引机制,查询速度加快)
MyISAM不支持事务,也不支持外键,优势是访问速度快,但是表级锁限制了它在写、修改负载方面的性能,应用于只读的主的数据场景
查询多,修改少的时候使用
Memory
内部产生了一张frame表
在内存中存储所有数据,应用于对非关键数据进行快速查找的场景。
数据量小,并对服务器的内存有要求,因为断电消失,只能存一些短小的数据。
用来记录每个任务的登陆状态,非重要的数据可以存放
重启后无数据
blackhole 黑洞
内部产生了一张frame表
不存储数据,往黑洞表插入数据会记录在日志binlog,进行分流数据
二、Mysql 工作流程
三、表
所有的表头的列都称为字段,其他的每一行内容都称为一条记录
四、数据类型
① 数值类型
DECIMAL(能表示整数,但一般用来表示小数,需要精准记录数值的数字,底层以字符串存储) > DOUBLE(小数) > FLOAT(小数) 小数的精确度
常用:INT、FLOAT、DECIMAL
定义int类型时,有约束是没有一样
定义int时,加上unsigned 表示创建有符号的int
float、double、decimal 定义时需要两个参数(整体的位数,小数的位数)
float(255,30),double(255,30),decimal(65,30) 三个数据类型的最大范围
② 日期时间类型
DATE:年月日 用途:入职时间、离职时间、生日
TIME:时分秒
DATETIME:年月日时分秒,用途:日志系统
TIMESTAMP:年月日时分秒(描述的范围小,1970-2038年),不允许为空,默认值是当前加入数据的时间,每修改数据后会更新为修改时间,描述不了的时间变成0000-00-00 00:00:00
now() mysql的当前时间
值的格式
'2018-9-26 12:20:10'
'2018/9/26 12+20+10'
'20180926122010'
20180926122010
③ 字符串类型
char 0-255字节
定长字符串,存取速度快,但是浪费磁盘空间
存储方式:用空格补齐位数,查询时会默认给空格去掉
场景:数据的长度变化小,手机号、身份证号、学号;
频繁存储、对效率的要求高,存储短数据
varchar 0-65535 字节变长字符串
变长,节省磁盘空间,但是存取速度相对慢
存储方式:在字符串的前面会加一个长度标识,存储的位数是原来字符串位数+1;查询时原来有空格会保留
场景:数据长度的变化大,name、描述信息
对效率要求相对小,存储相对长的数据
concat() 拼接
④ ENUM和SET类型 (存储的类型是字符串)
enum 只允许从值集合中选取单个值,而不能取多个值
用途:单选,英航卡,性别
set和enum相似,一个字符串对象,允许几个中任意选择1各或者多个进行组合
set会提供去重功能
用途:多选,兴趣爱好;