InnoDB和Foreign KEY Constraints

InnoDB表中中Foreign Key定义

1. InnoDB允许a foreign key引用一个索引列或者索引组列。

2. InnoDB现在并不支持用户定义的分区表有foreign keys,这意味着不包含用户定义的分区表InnoDB可以包含foreign key引用,或者被foreign keys引用的列。

3. InnoDB允许a foreign key constraint引用一个non-unique的key,这是对标准SQL的扩展

Foreign Key引用行为

1. SET DEFAULT在mysql中是被允许的,但是对于InnoDB表却是无效的。在CREATE TABLE和

ALTER TABLE语句中,使用SET DEFAULT对于InnoDB表来说,是不允许的。

2. 如果你在parent表中有一些行,他们有相同的referenced key值,InnoDB做foreign key检测,好像伴有相同referenced key值的其它行都不存在。例如,如果你定义RESTRICT类型,在child表有一个行,它关联parent表中的多行,InnoDB不允许删除在parent表中的这些行的任何一行。

3. InnoDB做级联操作,是通过深度优先算法。是基于跟foreign key constraints对应的索引的记录。

4. 在自关联中,你不能使用ON UPDATE CASCADE或者ON UPDATE SET NULL操作,这主要是为了防止无限的循环更新。换句话说,在自关联中,ON DELETE SET NULL是可以的。

5. MySQL does not support deferred constraints

Foreign Key使用和错误信息

1. 你可以获取foreign keys信息和使用情况通过查询INFORMATION_SCHEMA.KEY_COLUMN_USAGE表,

为了获取更多关于InnoDB表的信息,可以查询INNODB_SYS_FOREIGN和INNODB_SYS_FOREIGN_COLS表。

2.SHOW ERRORS命令包含InnoDB表的foreign key的错误信息,你也可以获取更多的信息通过

SHOW ENGINE INNODB STATUS

上一篇:shell中跳出循环语句break和continue


下一篇:最好用的汉字转拼音代码PinYin4Objc(PinYin4J的objc版本)