从 MySQL 3.23.43b 开始, InnoDB 就支持外键约束,作为数据引用完整性的重要特色,InnoDB 在外键支持上开创了 MySQL 各种表类型的先河。建立外键的方法:例子:CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB;
CREATE TABLE child(id INT, parent_id INT, INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id)) TYPE=INNODB;两表都必须为 InnoDB 类型,外键和被引用的键,必须是索引中的一个列,InnoDB 不会自动为外键建立索引,必须明确指明。如果 CREATE TABLE 语句发生 1005 号错误,错误信息字符串引用 150 号错误,那么就是外键约束起了作用。只有在父行中包含 NULL 的列,才允许在子行中包含 NULL。目前任何 ALTER TABLE 操作都会删除外键约束,因此,建议采用 DROP TABLE 然后 CREATE TABLE 来修改 schema。因为 ALTER TABLE 在内部使用 RENAME TABLE 操作,这样就能混淆外键的引用,同样的 CREATE INDEX 也是作为 ALTER TABLE 来处理的,也不能用于外键约束的表。