MYSQL没有';t检查是否存在外键
我在这里面临一个奇怪的问题 表1:MYSQL没有';t检查是否存在外键,mysql,database,foreign-keys,foreign-key-relationship,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
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的值在degree表中不存在,我就不能在course表中插入任何值
但如果我尝试插入类似的内容
insert into course values('cor_001' , 'blah' , 'COURSE NAME' );
即使“blah”不是有效的degree\u id,此查询也会成功运行。您可能正在使用不支持外键的MyISAM表。FK指令被解析和接受,然后被忽略 您需要使用InnoDB表以获得适当的FK支持:
CREATE TABLE (...) ENGINE=InnoDB;
^^^^^^^^^^^^^^
如果执行“显示创建表格”操作,您将在输出末尾看到正在使用的引擎类型。是的,这是正确的。现在我如何更改它们以使用InnoDB?我已经创建并填充了很多表。我无法尝试删除我的表。
alter table yourtable engine=innodb
。您必须进一步修改该表以重新应用FK定义。一旦myisam完成了create
querys.K,它们就会丢失。因此,我需要首先修改所有引擎,然后修改表以应用外键。是否仍然需要更改mysql的默认引擎?这样我就不必每次在my.cnf/my.ini中创建表时都提到ENGINE属性了?default storage ENGINE