日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

解决:Navicat for mysql 设置外键出错

發布時間:2023/12/20 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决:Navicat for mysql 设置外键出错 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 看下是不是外鍵允許為空,不唯一等約束條件不滿足

2 或者外鍵設置刪除時為 restrict

1. 兩個字段的類型或者大小不嚴格匹配。例如,如果一個是int(10),那么外鍵也必須設置成int(10),而不是int(11),也不能是tinyint。另外,你還必須確定兩個字段是否一個為 signed,而另一個又是unsigned(即:無符號),這兩字段必須嚴格地一致匹配,更多關于signed和unsigned的信息,請參閱:http://www.verysimple.com/blog/?p=57
2. 試圖設置外鍵的字段沒有建立起索引,或者不是一個primary key(主鍵)。如果其中一個不是primary key的話,你必須先為它創建一個索引。
3. 其中一個或者兩個表是MyISAM引擎的表。若想要使用外鍵約束,表必須是InnoDB引擎(實際上,如果兩個表都是MyISAM 引擎的,這個錯誤根本不會發生,但也不會產生外鍵,只會建立索引)你需要檢查表的引擎類型。
4. 外鍵的名字不能重復。你應該檢查你的數據庫以確保外健名字是唯一的,或者你在鍵名后面加上幾個隨機的字符以測試是否是這個原因。
5. 你可能設置了ON?DELETE?SET?NULL,但是相關的鍵的字段又設置成了NOTS?NULL值。你可能通過修改cascade的屬性值或者把字段屬性設置成allow?null來解決。
6. 請確定你的Charset和Collate選項在表級和字段級上的一致。
7. 你可能設置為外鍵設置了一個默認值,如default=0。
8.?ALTER聲明中有語法錯誤

?

?

例子:

建立class表與student表之間的外鍵連接,class為父表,student為子表
打開student的設計表。

如果c_id不允許為空則當,選擇刪除時-->>SET NULL就會出現Cannot add foreign key constraint的提示,這是因為刪除置空有條件,必須滿足字段允許為空(如果不滿足,外鍵無法創建)當然,如果不允許為空,可以選擇刪除時-->>CASCADE也可以建立外鍵。

當勾選允許為空之后

再去保存就可以了。

還有必須注意,Engin必須為InnoDB。


總結
在我們使用外鍵的時候,應該遵循如下條件:

?

一、如果一張表中有一個非主鍵的字段指向了別一張表中的主鍵,就將該字段叫做外鍵。

  一張表中可以有多個外鍵。

  外鍵的默認作用有兩點:

  1.對子表(外鍵所在的表)的作用:子表在進行寫操作的時候,如果外鍵字段在父表中找不到對應的匹配,操作就會失敗。

  2.對父表的作用:對父表的主鍵字段進行刪和改時,如果對應的主鍵在子表中被引用,操作就會失敗。

  外鍵的定制作用----三種約束模式:

    district:嚴格模式(默認), 父表不能刪除或更新一個被子表引用的記錄。

    cascade:級聯模式, 父表操作后,子表關聯的數據也跟著一起操作。

    set null:置空模式,前提外鍵字段允許為NLL,? 父表操作后,子表對應的字段被置空。

?

?

  使用外鍵的前提:

  1. 表儲存引擎必須是innodb,否則創建的外鍵無約束效果。

  2. 外鍵的列類型必須與父表的主鍵類型完全一致。

  3. 外鍵的名字不能重復。

  4. 已經存在數據的字段被設為外鍵時,必須保證字段中的數據與父表的主鍵數據對應起來。

二、新增外鍵

  1. 在創建時增加

   create table my_tab1(

   id int primary key auto_increment,

   name varchar(10) not null,

   class int,

   foreign key(class) references my_tab2(主鍵字段名);

   )charset utf8;

  2. 在創建好的表中增加

   alter table my_tab1?add?[constraint 外鍵名]?foreign key(外鍵字段名) references mytab2(主鍵字段名);

三、刪除外鍵

  alter table my_tab drop foreign key 外鍵名字;

總結

以上是生活随笔為你收集整理的解决:Navicat for mysql 设置外键出错的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。