1. 程式人生 > >mysql 新增外來鍵 遇到的問題

mysql 新增外來鍵 遇到的問題

2017-2-23 wangan:

問題描述 新增外來鍵時報錯 

[SQL]alter table user_viewitems add foreign key locstock_ibfk2 (user_id) references users(id)  
  


[Err] 1215 - Impossible d'ajouter des contraintes d'index externe

解決步驟

 1 給外來鍵欄位新增索引,

2.檢視欄位型別是否和主表一致。

完成上述兩步後發現還是報錯

http://stackoverflow.com/questions/26260425/phpmyadmin-mysql-foreign-key

這連結說 給外來鍵欄位加unsigned 


然後

3. 運行了  alter table user_viewitems  modify user_id INT UNSIGNED NOT NULL 

4.再次新增外來鍵  成功!!

[SQL]alter table user_viewitems add foreign key locstock_ibfk2 (user_id) references users(id)  
  


受影響的行: 0
時間: 0.055s

-------------------------------------

Sql程式碼  收藏程式碼

alter table locstock add foreign key locstock_ibfk2 (stockid) references product(stockid)  

  locstock 為表名, locstock_ibfk2 為外來鍵名 第一個括號裡填寫外來鍵列名, product為表名,第二個括號裡是寫外來鍵關聯的列名


刪除外來鍵
Sql程式碼  收藏程式碼
alter table locstock drop foreign key locstock_ibfk2   
查看錶有哪些外來鍵
Sql程式碼  收藏程式碼
show create table locstock  

==============================================================
語法:

Sql程式碼  收藏程式碼
[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)  

    REFERENCES tbl_name (index_col_name, ...)  
    [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]  
    [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]  

條件:
     所有tables必須是InnoDB型 ,它們不能是臨時表。
     在引用表中,必須有一個索引,外來鍵列以同樣的順序被列在其中作為第一列。這樣一個索引如果不存在,它必須在引用表裡被自動建立。
     在引用表中,必須有一個索引,被引用的列以同樣的順序被列在其中作為第一列。
     不支援對外來鍵列的索引字首。這樣的後果之一是BLOB和TEXT列不被包括在一個外來鍵中, 這是因為對這些列的索引必須總是包含一個字首長度。
     如果CONSTRAINTsymbol 被給出,它在資料庫裡必須是唯一的。如果它沒有被給出,InnoDB自動建立這個名字。