解決: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 外鍵名字;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456492.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456492.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456492.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python加鹽加密方法hashlib(md5,sha224,sha1,sha256)

用random.randint隨機數給密碼加,鹽加強密碼的安全性

Ubuntu16.04以root身份登入!

首先以非root用戶身份登入系統。 1,修改root密碼:啟動shell,隨后在shell里面輸入命令: sudo passwd root 最后輸入root要使用的密碼,需要輸入兩次,這樣root密碼就修改完畢了! 2,修改…

HDU2193-AVL-數據結構-AVL

題目鏈接:http://acm.hdu.edu.cn/statistic.php?pid2193&from126&lang&order_type0 好吧。水題一道,原本以為是一道寫AVL樹的想寫來練練手。沒有想到卻是這樣一道水題,好吧,猥瑣的水過。 題目意思: 題目大…

玩Linux碰到的問題以及使用技巧總結

文章目錄1、問題問題一:解壓JDK報錯:gzip:stdin:not in gzip format。 問題二:在Linux下ping不通外網 問題三:解決虛擬機克隆后網卡eth0不見的問題 問題四:執行腳本報錯:syntax error: unexpected end of f…

python連接MySQL數據庫搭建簡易博客

實現功能大概 將python和MySQL數據庫交互進行 封裝 ---》》utils.py 文件程序 ----》blog.py # -*- coding: utf-8 -*- # Time : 2019/08/30 15:33 # Author : Liu # File : utils.pyimport pymysql import hashlibclass dbHelper:def __init__(self, host, user, pass…

利用Sqoop在數據庫和Hive、HDFS之間做ETL操作

文章目錄[toc] 目錄:一、利用Sqoop,從Oracle到HDFS二、利用Sqoop,從Oracle到Hive三、遇到的問題目錄: 一、利用Sqoop,從Oracle到HDFS 第一步:把Oracle驅動拷貝到Sqoop安裝路徑中的lib文件夾下。 第二步&…

跨地域的VPC私網互通【高速通道案例】

最近一家大型企業正在將業務遷移至阿里云平臺,用戶有深圳,北京,上海等分支,其中上海為總部,用戶要求在阿里云上的華南1,華北2,華東2分別建立VPC網絡,其中華南1,華北2要與…

HDU 1711 Number Sequence(KMP模板)

http://acm.hdu.edu.cn/showproblem.php?pid1711 這道題就是一個KMP模板。 1 #include<iostream> 2 #include<cstring>3 using namespace std;4 5 const int maxn 10000005;6 7 int n,m;8 9 int next[maxn]; 10 int a[maxn], b[maxn]; 11 12 void get_next() 13…

Redis數據庫學習筆記

一、NoSql&#xff08;非關系型數據庫&#xff09; NoSQL&#xff1a;NoSQL Not Only SQL 非關系型數據庫 ? NoSQL&#xff0c;泛指非關系型的數據庫。隨著互聯網web2.0網站的興起&#xff0c;傳統的關系數據庫在應付web2.0網站&#xff0c;特別是超大規模和高并發的SNS類型…

Sqoop的安裝配置及工作機制

文章目錄[toc] 目錄&#xff1a;1、簡介2、sqoop安裝2.1、下載并解壓2.2、修改配置文件2.3、加入mysql或oracle的jdbc驅動包2.4、驗證啟動3、Sqoop的原理3.1、代碼定制目錄&#xff1a; 1、簡介 sqoop是apache旗下一款“Hadoop和關系數據庫服務器之間傳送數據”的工具。 導入…

3D打印技術在醫療領域能做些什么?幫助精確完成手術

3D打印技術出現在20世紀90年代中期。它與普通打印工作原理基本相同&#xff0c;打印機內裝有液體或粉末等“打印材料”&#xff0c;與電腦連接后&#xff0c;通過電腦控制把“打印材料”一層層疊加起來&#xff0c;最終把計算機上的藍圖變成實物。這打印技術稱為3D立體打印技術…

【一些簡單的jQuery選擇器】

學習【js DOM 編程藝術】&#xff0c;最后面有許多jQuery的選擇器&#xff0c;每個都動手敲了一遍。 jQuery 提供了高級選擇器的方法。 js獲取元素的三個基本方法分別是通過標簽名&#xff0c;類名和id&#xff0c;即(getElementsByTagName, getElementsByClassName和getElemen…

pymysql操作mysql數據庫

一、pymysql操作mysql數據庫 安裝pymysql pip install pymysql 1.1 pymysql操作數據庫的五行拳 連接數據庫 使用Connect方法連接數據庫 pymysql.Connections.Connection(hostNone, userNone, password, databaseNone, port0, charset) 參數說明&#xff1a;host – 數據庫服務…

SecureCRT常用的使用技巧

文章目錄前言&#xff1a;1、SecureCRT 超時自動斷開連接的解決辦法2、SecureCRT連接Linux時&#xff0c;終端顯示亂碼的問題。3、SecureCRT使用自動記錄日志功能4、使用SecureCRT從Windows上傳文件到Linux5、SecureCRT配色推薦和永久設置前言&#xff1a; 由于工作需要&#…

解決:(1062, Duplicate entry '2019-08-30' for key 'rdate')

解決(1062, "Duplicate entry 2019-08-30 for key rdate") 顯然這個問題是因為插入重復主鍵導致從庫不工作了&#xff0c;更改庫的唯一限制&#xff1a; unique 為normal 或者刪除unique ALTER TABLE 表明 DROP INDEX 字節名; 實例 CREATE TABLE good_booked (au…

人民幣數字金額轉大寫金額

public class t {public static String Trans2RMB(String money) {int index money.indexOf(".");if (index < 0) {// 沒有角分money money ".00";index money.indexOf(".");}if (money.substring(index, money.length()).length() < …

eventBus 與fragment

同一個eventbut是不可以注冊兩次的&#xff0c;所以我們會在ondestroy方法中進行unregister&#xff08;&#xff09; 但是在fragment中&#xff0c;最好把unregister&#xff08;&#xff09;方法寫到 onDestroyView&#xff08;&#xff09;方法中而不是onDestrory&#xff0…

機器學習之線性代數總結

目錄1、SVD是什么、表達式是什么及對應的數學含義&#xff1b;2、了解方陣、行列式的含義&#xff08;方陣即矩陣&#xff0c;行列式即矩陣的計算結果&#xff09;3、了解代數余子式的概念4、伴隨矩陣的概念5、知道方陣的逆的公式、范德蒙行列式6、知道矩陣的乘法&#xff0c;掌…

Python操作MongoDB

一 安裝 pymongo pip install pymongo3.4 ? 導入 MongoClient from pymongo import MongoClient 二 連接MongoDB數據庫 MongoDB端口號:27017 連接MongoDB我們需要使用PyMongo庫里面的MongoClient&#xff0c;一般來說傳入MongoDB的IP及端口即可&#xff0c;第一個參數為地…

各種插件

上下滾動抽獎效果, 移動端省級聯動, 時間聯動 , pc端省級聯動 vue 支持各種方式上傳 一個不太完善的拖拽排序 react 拖拽交換插件 各種小插件 壓縮圖片移動端 h5上傳 h5分片上傳 包括服務器 slideSuper 各種滑動效果 wow.js 轉載于:https://www.cnblogs.com/dhsz/p/6377956.h…