建立資料庫新增外建的時候,遇到了如下錯誤,由此總結一下給表新增外建的條件
error 1215 (hy000): cannot add foreign key constraint
1. 兩個欄位的型別或者大小不嚴格匹配。例如,如果乙個是int(10),那麼外來鍵也必須設定成int(10),而不是int(11),也不能是tinyint。另外,你還必須確定兩個字段是否乙個為 signed,而另乙個又是unsigned(即:無符號),這兩欄位必須嚴格地一致匹配。
2. 其中乙個或者兩個表是myisam引擎的表。若想要使用外來鍵約束,表必須是innodb引擎(實際上,如果兩個表都是myisam 引擎的,這個錯誤根本不會發生,但也不會產生外來鍵,只會建立索引)你需要檢查表的引擎型別。
3. 試圖設定外來鍵的字段沒有建立起索引,或者不是乙個primary key(主鍵)。如果其中乙個不是primary key的話,你必須先為它建立乙個索引。
4. 外來鍵的名字不能重複。你應該檢查你的資料庫以確保外健名字是唯一的,或者你在鍵名後面加上幾個隨機的字元以測試是否是這個原因。
5. 你可能設定了on delete set null,但是相關的鍵的字段又設定成了nots null值。你可能通過修改cascade的屬性值或者把字段屬性設定成allow null來解決。
6. 請確定你的charset和collate選項在表級和字段級上的一致。
7. 你可能設定為外來鍵設定了乙個預設值,如default=0。
8. alter宣告中有語法錯誤。
下面給乙個建立資料庫正確新增外建的例子
1.建立department表:
create table department(
dept_name varchar(20),
budget int,
descript varchar(20),
primary key(dept_name)
);
建立course表:
create table course(
course_id varchar(20),
deptnames varchar(20),
credits int,
foreign key(deptnames) references department(dept_name));
course表的外來鍵deptnames指向department表的dept_name。
若要刪除department,course這兩個表,則必須先刪除course表,再刪除department表。
MySQL資料庫建庫建表以及外來鍵級聯操作
mysql資料庫 建庫語句 create database 資料庫名 使用資料庫 use 資料庫名 create database robowolf material use robowolf material 刪表語句 drop table 表名 建表語句 create table 資料名稱 資料...
MySQL 新建資料庫 建立索引 建立外來鍵
本文通過命令運算元據庫的方式,以簡單會員表為例,為讀者簡述資料表的簡單設計及操作。1.新建資料庫 create database 資料庫名 2.新建資料表 tab1.會員使用者名稱表 create table w member mid int 20 not null primary key auto...
MySQL之建立資料庫
1 建立資料庫create database或create database 資料庫無大小寫之分 create database 或 create database 或create database if not exists default character set 字符集名 default c...