我在这里遇到了一个奇怪的问题。
表 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/