mysql学习->存储引擎(Innodb)
InnoDB引擎提供了具有提交,回滚和崩溃恢复能力的事务安全,但是对比Myisam引擎效率会差一些,并且会占用更多的磁盘空间和保留数据和索引
1.自动增长列
innodb表的自动增长列可以手工输入,但是插入的值如果是空或者0,则实际插入的将是自动增长后的值,如图:
可以通过 ALTER TABLE 表名 AUTO_INCREMENT = n 语句强制设置自动增长列的初始值,默认从1开始,但是该强制的默认值是保留在内存中的,如果该值在使用之前数据库重新启动,那么这个强制的默认值就会丢失,就需要在数据库启动后重新启动。
对于innodb表自动增长列必须是索引,如果是组合索引,也必须是组合索引的第一列,但是对于Myisam表自动增长列可以是组合索引的其他列,这样插入记录后,自动增长列是按照组合索引的前面几列进行排序后递增的,例如创建新的myisam表,自动增长列d1是组合索引的第二列,对于插入一些记录后,可以发现自动增长列是按照组合索引的第一列d2进行排序后递增的
2.外键约束
Mysql支持外键的只有innodb,在创建外键的时候,要求父表有对应的索引,子表在创建外键的时候也会自动创建对应的索引
例子:
两个表,country是父表,county_id为主键索引,city表是子表,county_id字段为外键,对应county表的主键county_id
在创建索引时,可以指定在删除,更新父表时,对子表进行的相应操作,包括RESTRICT,CASCADE,SET NULL,和NO ACTION,其中RESTRICT和NO ACTION相同,是指限制在字表有关联记录的情况下不能更新,CASCADE表示在父表更新或删除时,更新或者删除字表对应的记录,SET NULL则表示父表在更新或者删除的时候,子表的对应字段被SET NULL
在上面创建表的时候,字表的外键指定是ON DELETE RESTRICT ON UPDATE CASCADE,主表在删除记录的时候,如果子表有对应记录不允许被删除,主表更新的时候,如果子表有对应的记录,则子表对应更新
当某个表被其他表创建了外键参照,那么该表对应的索引或者主键禁止被删除,当主表更新时,子表对应的也更新了
,
可以通过SET FOREIGN_KEY_CHECKS = 0 来关闭外键,或者等1来还原。