外键不会阻止我输入数据MySQL

时间:2010-02-24 15:34:33

标签: sql mysql foreign-keys

我有一个表,其中一列作为外键连接到另一个表。 这是一个板球问题,我有一个名为Fixtures的桌子和另一个名为Inning的桌子。

Inning表有一个FixtureId列,与Fixture表有关。

我希望如果我使用与Fixture无关的FixtureId对inning表进行插入,那么它会出错但是情况不是这样......

任何人都可以解释为什么会这样吗?

2 个答案:

答案 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语句吗? 如果我理解正确,(我可能不会)你的外键只是空白,如果你没有该字段的值,为什么会出错呢?