MYSQL 不检查外键是否存在

标签 mysql database foreign-keys foreign-key-relationship

我在这里遇到了一个奇怪的问题。

表 1:

create table degree (degree_id varchar(6) primary key , degree_name varchar(32) unique key , degree_abbr varchar(3));

表 2:

create table course (course_id varchar(6) primary key , degree_id varchar(6) not null, course_name varchar(40) not null ,  foreign key (degree_id) references degree 
(degree_id));

现在据我了解 SQL,如果学位表中不存在字段 degree_id 的值,我无法在类(class)表中插入任何值。

但是如果我尝试插入类似

的内容
insert into course values('cor_001' , 'blah' , 'COURSE NAME' );  

此查询运行成功,即使“blah”不是有效的 degree_id。

最佳答案

您可能正在使用不支持外键的 MyISAM 表。 FK 指令被解析和接受,然后被忽略。

您需要使用 InnoDB 表以获得适当的 FK 支持:

CREATE TABLE (...) ENGINE=InnoDB;
                  ^^^^^^^^^^^^^^

如果您执行 show create table your_table,您会在输出的末尾看到正在使用的引擎类型。

关于MYSQL 不检查外键是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16444830/

相关文章:

C# 将输入与mysql值进行比较

mysql - 你能推荐一个免费的 Linux 轻量级 MySQL GUI 吗?

mysql - MYSQL存储过程中的XML解析

php - $_Session[variable] 放在代码中的什么位置

mysql - mysql 连接困难(空值未显示)

java - 无法进入jsp文件中的if语句

database - 使用golang从postgres中的csv批量插入而不使用for循环

ruby-on-rails - 在代理键存在的情况下,我应该如何为域约束定义复合外键?

mysql - 如何截断一些表?

mysql - 使用一个引用字段来实现多个外键约束有什么可能