mysql常见的存储引擎
1.什么是存储引擎
不同的技术以及配套的相关功能在 MySQL中被称作存储引擎。存储机制、索引技巧、锁定水平等等。
2.常见操作
查看默认存储引擎
show variables like '%engine%';
查看数据库支持的存储引擎
show engines \G;
show variables like 'have%'; #DISABLED表示被禁用
3.常用索引
myisam
不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表
每个MyISAM在磁盘上存储成3个文件,其中文件名和表名都相同,但是扩展名分别为:
.frm(存储表定义)
.MYD(MYData,存储数据)
.MYI(MYIndex,存储索引)
数据文件和索引文件可以放置在不同的目录,平均分配IO,获取更快的速度,临时解决空间不足问题
表损坏后,不能被访问,数据库异常重启
CHECK TABLE语句来检查MyISAM表的健康,并用REPAIR TABLE语句修复一个损坏到MyISAM表
3种不同的存储格式:
静态(固定长度)表
存储非常迅速,容易缓存,出现故障容易恢复
缺点是占用的空间通常比动态表多
宽度定义补足空格
动态表
动态表包含变长字段,记录不是固定长度的,这样存储的优点是占用空间较少
频繁的更新删除记录会产生碎片,需要定期执行OPTIMIZE TABLE语句或myisamchk -r命令来改善性能,并且出现故障的时候恢复相对比较困难
压缩表
myisamchk工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支
InnoDB
支持事务安全,写效率差,占用更多的磁盘空间保留数据和索引
自动增长列
InnoDB表的自动增长列可以手工插入,但是插入的值是空或者0,则实际插入的将是自动增长后的值
last_insert_id() 查询当前线程最后插入记录使用值,如果一次插入多条记录,返回的是第一条记录使用的自动增长值
自动增长列必须是索引,如果是组合索引的话,必须是组合索引的第一列
外键约束
只有InnoDB支持索引,创建外键时,要求父表必须有对应的索引,子表也会对应创建对应的索引
删除、更新父表时,对子表进行相应的操作,restrict、cascade、set null和no action
restrict,no action子表有关联的情况下,父表不能更新
cascade 父表在更新或者删除时,更新或者删除子表对应的记录
set null 父表在更新或者删除时,子表对应的子段被set null
导入多表数据时,暂停外键检查