2013-05-08 162 views
1

我在這裏面臨一個奇怪的問題。MYSQL不檢查外鍵是否存在

表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的值不插入過程表中的任何值存在於學位表中。

但是,如果我嘗試插入類似

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

這個查詢成功運行,即使「胡說」不是一個有效的degree_id。

回答

3

你可能使用MyISAM表,它不支持外鍵。 FK指令被解析並接受,然後被忽略。

您需要使用InnoDB表進行適當的FK支持:

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

如果你做一個show create table your_table,你會看到在輸出端使用的發動機類型。

+0

是的,這是正確的。現在我該如何改變它們以使用InnoDB?我已經創建和填充了很多表格。我無法放下桌子。 – 2013-05-08 15:49:30

+0

'alter table yourtable engine = innodb'。您將不得不進一步修改表格以重新應用FK定義。一旦myisam完成了「創建」查詢,它們就會丟失。 – 2013-05-08 15:51:00

+0

K.所以我需要先修改所有引擎,然後修改表來應用外鍵。無論如何改變MySQL的默認引擎?這樣我每次創建表時都不需要提及ENGINE屬性。 – 2013-05-08 15:53:59