我有一个表,其中一列作为外键连接到另一个表。 这是一个板球问题,我有一个名为Fixtures的桌子和另一个名为Inning的桌子。
Inning表有一个FixtureId列,与Fixture表有关。
我希望如果我使用与Fixture无关的FixtureId对inning表进行插入,那么它会出错但是情况不是这样......
任何人都可以解释为什么会这样吗?
答案 0 :(得分:6)
确保在创建表时使用InnoDB存储引擎。其他存储引擎将简单地忽略外键约束。 (Source)
示例:
CREATE TABLE a (
id INT AUTO_INCREMENT PRIMARY KEY
) ENGINE=INNODB;
CREATE TABLE b (
id INT AUTO_INCREMENT PRIMARY KEY,
a_id INT,
FOREIGN KEY (a_id) REFERENCES a(id)
) ENGINE=INNODB;
INSERT INTO b (id, a_id) VALUES(NULL, 1);
上面的插入失败了:
错误1452(23000):无法添加或更新子行:外键约束失败...
答案 1 :(得分:0)
我不确定我明白你能详细说明并展示你的sql语句吗? 如果我理解正确,(我可能不会)你的外键只是空白,如果你没有该字段的值,为什么会出错呢?