查看支持的存储引擎
sql
SHOW ENGINES;
show variables like '%storage_engine%'; 看你的mysql当前默认的存储引擎:
data目录
sql
如果一个表同时有这3个文件,则存储引擎是myisam:
(1)*.frm--表定义,是描述表结构的文件。
(2)*.MYD--"D"数据信息文件,是表的数据文件。
(3)*.MYI--"I"索引信息文件,是表数据文件中任何索引的数据树。
1 InnoDB存储引擎 .frm .ibd
sql
InnoDB存储引擎总支持AUTO_INCREMENT。自动增长列的值不能为空,并且值必须唯一。
MySQL中规定自增列必须为主键。在插入值的时候,如果自动增长列不输入值,则插入的值为自动增长后的值;
如果输入的值为0或空(NULL),则插入的值也是自动增长后的值;
如果插入某个确定的值,且该值在前面没有出现过,就可以直接插入。
InnoDB还支持外键(FOREIGN KEY)。
外键所在的表叫做子表,外键所依赖(REFERENCES)的表叫做父表。
父表中被字表外键关联的字段必须为主键。
当删除、更新父表中的某条信息时,子表也必须有相应的改变,这是数据库的参照完整性规则。
1.1 存储 .frm .ibd
sql
InnoDB中,创建的表的表结构存储在.frm文件中。
数据和索引存储在innodb_data_home_dir和innodb_data_file_path定义的表空间中。
1.2 InnoDB的优势缺点
sql
在于提供了良好的事务处理、崩溃修复能力和并发控制。
支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。
如果有大量的update和insert,建议使用InnoDB,特别是针对多个并发和QPS较高的情况。
Innodb支持事务和行级锁,是innodb的最大特色。
缺点是读写效率较差,占用的数据空间相对较大。
1.3 InnoDB事务
sql
innodb支持事务和行级锁,是innodb的最大特色。
事务的ACID属性:
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
并发事务带来的几个问题:
更新丢失,脏读,不可重复读,幻读。
事务隔离级别:
读未提交(Read uncommitted),
读已提交(Read committed),
可重复读(Repeatable read),
串行化(Serializable) show global variables like 'tx_isolation';
2 MyISAM存储引擎
sql
MyISAM是MySQL中常见的存储引擎,曾经是MySQL的默认存储引擎。
MyISAM是基于ISAM引擎发展起来的,增加了许多有用的扩展。
基于MyISAM存储引擎的表支持3种不同的存储格式。
包括静态型、动态型和压缩型。
其中,静态型是MyISAM的默认存储格式,它的字段是固定长度的;动态型包含变长字段,记录的长度不是固定的;
压缩型需要用到myisampack工具,占用的磁盘空间较小。
2.1 MyISAM的表存储成3个文件 .frm .myd .myi
sql
文件的名字与表名相同。拓展名为frm、MYD、MYI。
frm文件存储表的结构;
myd文件存储数据,是MYData的缩写;
myi文件存储索引,是MYIndex的缩写。
2.2 MyISAM的优势缺点
sql
MyISAM的优势在于占用空间小,处理速度快。
缺点是不支持事务的完整性和并发性。
不是事务安全的,而且不支持外键,如果执行大量的select,insert MyISAM比较适合 myisam只支持表级锁