表类型(存储引擎)
1. Mysql存储引擎概述
Mysql5.0支持的存储引擎包括:MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等。其中InnoDB和BDB提供事务的安全表。其他存储引擎都是非事务安全表。
a) 查看当前默认存储引擎
show variables like ‘table_type’;
b) 查看数据库支持的存储引擎
show engines \G
show variables like ‘have%’;
c) 创建表时可以指定存储引擎。
create table ai(id bigint(20) not null auto_increment primary key) engine=MyISAM default charset=utf8;
d) 可以使用命令修改表的存储引擎
alert table tablename engine=InnoDB
2. 介绍最常使用4种存储引擎:MyISAM、InnoDB、MEMEROY、MERGE。
a) MyISAM 的默认存储引擎。MyISAM不支持事务、也不支持外键,其优势是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本上都可以使用这个引擎来创建表。
MyISAM的表还支持3种不同的存储方式,分别是:
静态(固定长度)表
1. 表态表:是默认存储格式,…具体细节请翻书123页
2. 动态表:包含变长字段,记录不是固定长度的,这样存储的优点是占用的空间相对较少,但是频繁地更新删除记录会产生碎片,需要定期执行optimize table 语句或myisamchk –r命令来改善性能,并且出现故障的时候恢复相对比较困难。
3. 压缩表:由myisampack工具创建,占据非常小的磁盘空间,因为每个记录是被单独压缩的,所以只有非常小的访问开支。
b) InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnDB写的处效率差一些并且会占用更多的磁盘空间以保留数据和索引。
1. 自动增长
a) InnoDB自动增长列。
b) 可以使用alter table tablename auto_increment=n;修改表的自动增长初识值。
c) 对于InnoDB表,自动增长列必须是索引。
2. 外键约束
a) Mysql支持外键约束的存储引擎只有InnoDB。
b) 更新父表时,对子表进行的相应操作,包括restrict(限制, 约束, 限定)、cascade、set null、no action。Restrict和no action相同,是指限制在子表有关联记录的情况下父表不能更新;cascade表示父表在更新或者删除时,更新或者删除子表对应记录;set null则表示父表在更新或者删除的时候,子表的对应字段被set null。选择后两种方式要谨慎,可能会因为错误的操作导致数据的丢失。
c) 当某个表被其他表创建了外建参照,那么该表的对应索引或者主键禁止被删除。
d) 关闭外建约束加快处理
set foreign_key_checks=0
e) 开启
set foreign_key_checks=1
3. 存储方式
a) 使用共享表空间存储
b) 使用多表空间存储
使用多表空间的存储方式,需要设置参数innodb_file_per_table,并重启服务才生效。
c) Memory存储引擎使用存在内存中的内容来创建表。
1. 因为数据是存储在内存中的,并且默认使用HASH索引。但是一但服务器关闭,表中的数据就会丢失。
2. 指定Memory表创建索引的时候,指定使用HASH索引
create index indexname using hash on tablename (field)
drop index indexname on tablename
d) Merge存储引擎是一组MYISAM表的组合,…..
对Merge类型的表可以进行查询、更新、删除的操作。