先建了两个表,其中定义了一个外键约束:
create table t1
(
id_p int,
firstname varchar(20),
primary key (id_p)
);
create table t2
(
id_q int,
id_p int,
lastname varchar(20),
primary key (id_q),
foreign key (id_p) references t1(id_p) # 定义外键
);
插入一些值进行测试:
insert into t1 values (1,'bob'),(2,'tom');
insert into t2 values (23,100,'lee'); # 插入一行违反外键约束的值
这时奇异的事情发生了,向表t2插值的语句竟然无视外键约束,运行成功了?!!
心灰意冷的我在网上搜了下,然后运行以下语句:
select @@FOREIGN_KEY_CHECKS;
发现返回结果是0,说明目前外键约束是无效的状态。设置成生效:
SET FOREIGN_KEY_CHECKS = 1;
之后再尝试插入违反外键约束的值,就会正常报错了。
真是醉了,为什么会有这么奇怪的东西。