1. 程式人生 > >mysql 建立資料庫之新增外建出錯問題總結

mysql 建立資料庫之新增外建出錯問題總結

建立資料庫新增外建的時候,遇到了如下錯誤,由此總結一下給表新增外建的條件

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 建立資料庫新增出錯問題總結

建立資料庫新增外建的時候,遇到了如下錯誤,由此總結一下給表新增外建的條件 ERROR 1215 (HY000): Cannot add foreign key constraint1.  兩個欄位的型別或者大小不嚴格匹配。例如,如果一個是int(10),那麼外來鍵也必須設定

《SQL入門經典》筆記(第五章:建立資料庫操作資料)

1. 資料操作語言(DML),用於修改關係型資料庫裡的資料和表。   2. SQL中三個基本的DML命令是: INSERT UPDATE DELETE SELECT(基本查詢命令)可以與DML配合使用。   3. INSERT:

《SQL入門經典》筆記(第四章:建立資料庫去規格化資料庫

1. 什麼是去規格化? 去規格化是通過修改規格化資料庫的表的構成,在允許一定程度的資料冗餘的情況下,提高資料庫庫效能。   2. 為什麼要去規格化? 嘗試提高效能是進行去規格化資料庫的唯一原因(規格化的資料庫需要頻繁地進行表的結合,效能會降低)。   3.

《SQL入門經典》筆記(第四章:建立資料庫規格化資料庫

1. 原始資料庫: 在未規格化之前,一些資料可能會在多個表中出現,這被稱作資料冗餘。資料冗餘對安全、磁碟利用、查詢速度和資料庫更新都有壞處。尤其是資料完整性會受到影響。   2. 什麼是規格化? 規格化是把原始資料庫分解為表,去除資料庫裡冗餘資料的過程。資料庫開發人員利用規

《SQL入門經典》筆記(第三章:建立資料庫管理資料庫物件)

1. 什麼是資料庫物件? 資料庫物件用於儲存或引用資料,需要被定義,例如表、試圖、簇、序列、索引和異名(讓表具有另一個名稱)。   2. 什麼是規劃? 規劃是與資料庫某個使用者名稱相關聯的資料庫物件集合。相應的使用者名稱被稱為“規劃所有人”/“關聯物件組的所有人”。 同

《SQL入門經典》筆記(第二章:建立資料庫資料型別)

“建立資料庫”包括五個內容:定義資料結構、管理資料庫物件、規格化過程、操作資料以及管理資料庫事務   1. 什麼是資料型別? 資料型別用於指定特定列所包含資料的規則,它決定了資料儲存在列裡的方式。SQL最基本的資料型別有字串、數值、日期和時間(其實每個實現都有自己的資料型別

mysql建立資料庫、使用者與賦權

mysql建立使用者與賦權 1、首先使用root使用者登入 hhh:~ jing_pin$ mysql -uroot -p123456 2、建立一個數據庫 mysql> create database hahaha character set utf8; 3、建立一個

mysqlmysql建立資料庫,基字符集 和 資料庫排序規則 的對比選擇

1.一般選擇utf8.下面介紹一下utf8與utfmb4的區別。 utf8mb4相容utf8,且比utf8能表示更多的字元。至於什麼時候用,看你的做什麼專案了,到https://www.cnblogs.com/sxdcgaq8080/p/9932786.html看unicode編碼區從1 ~ 126就屬於傳

mysql建立資料庫、授權並備份

直接上操作: [email protected]:~$ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connec

mysql 新建資料庫新增許可權

首先是進入資料庫 mysql -uroot -p123456; 進入mysql use mysql; 執行: create database newdatabase; source /root/new.sql; 此時去連線資料庫會發現連線不上,是因

Mysql建立資料庫和檢視資料庫

1.create database  ;(建立資料庫) create database mydb1 =(自定義)       [DEFAULT] CHARACTER SET charset_name  -- CHARACTER SET:

MYSQL 建立資料庫SQL

CREATE DATABASE crm CHARACTER SET utf8 COLLATE utf8_general_ci;   MySQL :: MySQL 5.7 Reference Manual :: 10.3.3 Database Character Set and Collation

吳裕雄 04-mysql建立資料庫

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin'; CREATE DATABASE 資料庫名; create DATABASE RUNOOB; mysqladmin -u root -p crea

Mysql建立資料庫

最近準備入手Mysql,感覺挺有意思的,準備好好學習學習。 剛看到建立mysql資料庫,這個建立資料庫跟Oracle有很大不同,我感覺mysql的資料庫跟Oracle的schema相似,但是mysql中又有schema,Oracle除了叢集環境是多個庫,多個例項,一般情況下

MySQL建立資料庫建立使用者以及授權

1、create schema [資料庫名稱] default character set utf8 collate utf8_general_ci;--建立資料庫   採用create schema和create database建立資料庫的效果一樣。 2、cr

mysql建立資料庫報錯You have an error in your SQL syntax; check the manual that corresponds to your MySQL se

在使用xshell遠端連線我的伺服器時想建立一個數據庫 結果執行不對,sql語句如下 mysql> create database 'wechatmall'; 結果出現mysql報錯,這個提示很明顯是sql語句有問題 You have an e

mysql建立資料庫及表時設定字符集

建立資料庫及表時設定字符集,避免出現中文亂碼的方法: 建立資料庫 CREATE DATABASE test CHARACTER SET utf8 COLLATE utf8_general_ci; --注意後面三個單詞之間是有下劃線的對於每個選項所給定的值,前面沒有等

初學mysql(十)-資料庫儲存過程、函式與遊標-自定義函式和流程控制(下)

上一篇部落格講了儲存過程、函式、以及遊標,這一篇部落格接著上一篇部落格來說。首先說說mysql資料庫中的流程控制及自定義函式的使用。 自定義函式: 根據所需要的功能,使用流程控制來完成所需要的功能,完成功能的程式碼就稱為自定義函式。要想完成自定義函式就必須學會流程控制的使

mysql建立資料庫和表

連線mysql伺服器: shell>mysql -uroot -p 利用quit退出。 檢視目前伺服器中擁有的資料庫: mysql>show databases; 使用資料庫時需要宣告: mysql>use test; 建立一個新的資料庫: mysql&g

Confluence 6 MySQL 建立資料庫資料庫使用者

一旦你成功的安裝和配置了 MySQL 資料庫伺服器,你需要為你的 Confluence 建立資料庫和資料庫使用者: 在 MySQL 中以超級使用者執行 'mysql' 。預設的使用者為 'root' 同時密碼為空。 建立一個空的 Confluence 資料庫例項(例如 confluence):