1.8.2.3 FOREIGN KEY 约束差异

MySQL 的外键约束实现在以下关键方面与 SQL 标准不同:

与参考 table 中的主键相比,SQL 标准中的MATCH子句控制如何处理复合(多列)外键中的NULL值。 MySQL 本质上实现了MATCH SIMPLE定义的语义,该语义允许外键全部或部分为NULL。在这种情况下,即使插入的(子 table)行与引用的(父)table 中的任何行都不匹配,也可以将其插入。 (可以使用触发器来实现其他语义.)

引用非UNIQUE键的FOREIGN KEY约束不是标准 SQL,而是InnoDBextensions。另一方面,NDB存储引擎在引用为外键的任何列上都需要显式唯一键(或主键)。

对于诸如UPDATEDELETE CASCADE之类的操作,未很好地定义对非唯一键或包含NULL值的键的外键引用的处理。建议您使用仅引用UNIQUE(包括PRIMARY)和NOT NULL键的外键。

有关外键约束的信息,请参见第 13.1.18.5 节“外键约束”

首页