MYSQL高级第二天(2)
存储引擎
MYSQL5.0支持的存储引擎包含:InnoDB、MYISAM、BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中INNODB和BDB提供事务安全表,其它存储引擎是非事务安全表。
MYSQL5.5之前默认是MYISAM,之后默认是INNODB。
1、查看所有引擎:
mysql> show engines;
2、查看默认引擎:
创建新表时如果不指定存储引擎,那么系统就会使用默认的存储引擎,MYSQL5.5之前的默认存储引擎是MYISAM,5.5之后就改为了INNODB。
查看MYSQL数据库默认存储引擎,指令:
mysql> show variables like '%storage_engine%';
3、各存储引擎特性
特点 |
InnoDB |
MyISAM |
MEMORY |
MERGE |
NDB |
存储限制 | 64TB | 有 | 有 | 没有 | 有 |
事务安全 | 支持 | ||||
锁机制 | 行锁(适合高并发) | 表锁 | 表锁 | 表锁 | 行锁 |
B树索引 | 支持 | 支持 | 支持 | 支持 | 支持 |
哈希索引 | 支持 | ||||
全文索引 | 支持(5.6版本之后) | 支持 | |||
集群索引 | 支持 | ||||
数据索引 | 支持 | 支持 | 支持 | ||
索引缓存 | 支持 | 支持 | 支持 | 支持 | 支持 |
数据可压缩 | 支持 | ||||
空间使用 | 高 | 低 | N/A | 低 | 低 |
内存使用 | 高 | 低 | 中等 | 低 | 低 |
批量插入速度 | 低 | 高 | 高 | 高 | 高 |
支持外键 | 支持 |
3.1 InnoDB
InnoDB存储引擎是MYSQL的默认存储引擎。InnoDb存储引擎提供了具有提交、回滚、崩溃恢复能力的事务安全。但是对比MYISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引。
1、支持事务:
2、支持外键:
MYSQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候,也会自动的创建对应的索引。
3、候选键:
R(A1,A2,...,An)
关系中能唯一标志一个元组的最小属性集。
关系实例上任何两个元组的值在候选键的属性(集)上取值不同。
若一个关系有多个候选键,可选择其中的一个作为主键(primary key)
包含候选键的属性集称为超键(Superkey)
若关系只有一个候选键,且这个候选键包含了关系的所有属性,称该候选键为全键(All-key)
构成候选键的每个属性称为主属性(Prime Attribute)
不包含在任何候选键中的属性称为非主属性(Non-prime Attribute)或非码属性(Non-key Attribute)
在创建索引时,可以指定在删除、更新父表时,对子表进行相应的操作,包括RESTRICT、CASCADE、SET NULL和NO ACTION。
RESTRICT和NO ACTION相同,是指限制在子表有关联记录的情况下,父表不能更新;
CASCADE表示在父表在更新或者删除时,更新或者删除子表对应的记录;
4、存储方式:
InnoDB存储表和索引有以下两种方式:
(1)使用共享表空间存储,这种方式创建的表的表结构保存在.frm文件中,数据和索引保存在innodb_data_home_dir和innodb_data_file_path定义的表空间中,可以是多个文件。
(2)使用多表空间存储,这种方式创建的表结构仍然存在.frm文件中,但每个表的数据和索引单独保存在.ibd中。
3.2 MyISAM
(1)不支持事务和外键
MyISAM不支持事务,也不支持外键,其优势是访问的速度快,对事务的完整性没有要求或者以SELECT、INSERT为主的应用基本上都可以使用这个引擎创建表。有以下两个比较重要的特点:
(2)文件存储方式:
每个MyISAM在磁盘上存储成3个文件,其文件名都和表名相同,但拓展名分别是:
.frm(存储表定义)
.MYD(MYDATA,存储数据)
.MYI(MYIndex,存储索引)