在处理 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。
我建议你更新工作台,只有当我使用我的mac时,我才遇到同样的问题,创建的表没有约束,但如果你运行生成的sql,它将正确创建所有内容,我使用我的Windows来创建并且它工作完美,然后经过大量测试后,我更新了 Mac 上的工作台版本,现在一切工作正常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)