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,存储索引)

posted @ 2022-07-20 22:25  哆啦阿梦  阅读(32)  评论(0编辑  收藏  举报