在处理 MySQL Workbench 中的 SQL 编辑器时,我偶然发现了一些奇怪的东西,其中执行似乎忽略了外键约束。这是一个例子:
create database testdb;
use testdb;
create table t1 (
`test` INT,
PRIMARY KEY (`test`)
) ENGINE = InnoDB;
create table t2 (
`test1` INT,
`test2` INT,
FOREIGN KEY (`test2`) REFERENCES t1(test),
PRIMARY KEY (`test1`)
) ENGINE = InnoDB;
insert into t1 values (1);
insert into t2 values (1,1);
insert into t2 values (2,2);
在此示例中,insert into t2 values (2,2);
应该会失败,因为 t1 中没有列 test 为 2 的行。
我已经在 phpMyAdmin 中进行了测试,它正确地失败并给出了违反外键约束的错误,但在 MySQL Workbench 中它没有给出错误,并且它被插入到表中(我已经用 phpMyAdmin 进行了检查) .
对我来说这不是一个大问题,因为我可以使用不同的客户端来输入 SQL,但我对它的工作原理很感兴趣,因为我对外键的理解是该值需要存在于引用的表中。
MySQL 版本是 5.5.16,引擎是 InnoDB。