1. 程式人生 > >MySQL建立外來鍵關聯錯誤

MySQL建立外來鍵關聯錯誤

當 你試圖在mysql中建立一個外來鍵的時候,這個出錯會經常發生,這是非常令人沮喪的。像這種不能建立一個.frm 檔案的報錯好像暗示著作業系統的檔案的許可權錯誤或者其它原因,但實際上,這些都不是的,事實上,這個mysql報錯已經被報告是一個mysql本身的 bug並出現在mysql 開發者列表當中很多年了,然而這似乎又是一種誤導。 

在很多例項中,這種錯誤的發生都是因為mysql一直以來都不能很好的支援的關係的問題, 更不幸的是它也並沒有指明到底是哪一個問題會導致上面那種錯誤,下面我把導致這個可怕 的150錯誤的常見原因列出來了,並且我以可能性的大小作了排序 

已知的原因: 

1, 兩個欄位的型別或者大小不嚴格匹配,例如,如果一個是INT(10), 那麼外來鍵也必須設定成INT(10), 而不是 INT(11) 也不能是 TINYINT. 你得使用 SHOW 命令來檢視欄位的大小,因為一些查詢瀏覽器有時候把 int(10) 和int(11) 都顯示為integer。另外,你還必須確定兩個欄位是否一個為 SIGNED,而另一個又是UNSIGNED, 這兩欄位必須嚴格地一致匹配,更多關於signed 和 unsigned 的資訊,請參閱:http://www.verysimple.com/blog/?p=57 

2, 你試圖引用的其中一個外來鍵沒有建立起索引,或者不是一個primary key , 如果其中一個不是primary key 的放,你必須為它建立一個索引。 

3, 外來鍵的名字是一個已經存在的一個鍵值了,這個時候,你應該檢查你的資料庫以確保外健名字是唯一的,或者你在鍵名後面加上幾個隨機的字元以測試是否是這個原因。 

4, 其中一個或者兩個表是MyISAM引擎的表,若想要使用外來鍵約束,必須是InnoDB引擎,(實際上,如果兩個表都是MyISAM 引擎的,這個錯誤根本不會發生,但也不會產生外來鍵),你可以通過查詢瀏覽器來設定表的引擎型別 

5, 你可能設定了ON DELETE SET NULL, 但是相關的鍵的欄位又設定成了NOTS NULL 值。你可能通過修改cascade 的屬性值或者把欄位屬性設定成 allow null 來搞定這個bug. 

6, 請確定你的Charset 和 Collate 選項在表級和欄位級上的一致 

7, 你可能設定為外來鍵設定了一個預設值,如 default=0 

8, 在這個關係裡面,其中的一個欄位是一個混合鍵值中的一個,它沒有自己獨立的索引,這時,你必須為它建立一個獨立的索引。 

9, ALTER 宣告中有語法錯誤 

10. 要連線的兩個表的編碼格式不同

相關推薦

MySQL建立外來關聯錯誤

當 你試圖在mysql中建立一個外來鍵的時候,這個出錯會經常發生,這是非常令人沮喪的。像這種不能建立一個.frm 檔案的報錯好像暗示著作業系統的檔案的許可權錯誤或者其它原因,但實際上,這些都不是的,事實上,這個mysql報錯已經被報告是一個mysql本身的 bug並出現在mysql 開發者列表當中很多年了,然

MySQL建立外來關聯報錯1005

主要原因有 1.外來鍵型別不對應 2.外來鍵字元編碼不對應 3.沒有建立對應的索引 4.是否有重複主鍵 附上建立索引以及外來鍵的語句(參考) ALTER TABLE country add INDEX index_name(emp_id) ALTER TABLE emp ad

MySQL建立外來連線報錯

當 你試圖在mysql中建立一個外來鍵的時候,這個出錯會經常發生,這是非常令人沮喪的。像這種不能建立一個.frm 檔案的報錯好像暗示著作業系統的檔案的許可權錯誤或者其它原因,但實際上,這些都不是的,事實上,這個mysql報錯已經被報告是一個mysql本身的 bug並出現在mysql 開發者列表當中很多年了,

MySQL建立外來時出現error121解決辦法

環境:MySQL Server 5.5 + Navicat for Mysql 10.0 問題:建立外來鍵時出現121錯誤  解決:把外來鍵名改為其他名字 錯誤資訊參考: error121 這是外關鍵字名字重複的錯誤,即使是在不同的表中,外關鍵字的名字也不能重複。  er

使用NaviCat for mysql建立外來的要求

要在Mysql資料庫平臺建立外來鍵關聯,必須滿足以下幾個條件:  1. 兩個表必須為 InnoDB 型別。  2. 外來鍵和被引用鍵必須是索引中的第一列,InnoDB不會自動為外來鍵和被引用鍵建立索引,必須明確建立      它們。  3. 外來鍵與對應的被引用鍵在 Inn

MySQL建立外來[條件/注意事項]

  先看個表例項: mysql> CREATE TABLE `ZZJG` ( `id` int(11) NOT NULL auto_increment, `orgid` varchar(32) NOT NULL COMMENT '組織機構ID', `orgname`

mysql建立外來

如果資料庫兩個表有相同欄位,通過外來鍵將兩個表聯絡起來可以只用儲存一個表的資訊就可以實現相應的功能。 檢視建立表命令:show create table 表名字; 建立表: mysql

mysql建立外來報錯的原因以及處理(can't not create table)

最近在玩資料庫的時候,偶爾會有外來鍵建立不成功的時候,於是上網查閱資料,整合自己的理解有了以下這篇文章:mysql建立外來鍵不成功的原因以及處理方法:第一種:外來鍵的欄位與關聯的欄位的型別不匹配(包括編碼格式的不匹配):兩個不同的表格(一個是record(借書記錄表),一個是

MYSQL建立外來失敗幾種情況記錄Can't create table不能建立

像這種不能建立一個.frm 檔案的報錯好像暗示著作業系統的檔案的許可權錯誤或者其它原因,但實際上,這些都不是的,事實上,這個mysql報錯已經被報告是一個mysql本身的bug並出現在mysql 開發者列表當中很多年了,然而這似乎又是一種誤導。 在很多例項中,這種錯誤的發生都是因為mysql一直以來都不能很

MySQL無法建立外來錯誤 Err 1215: Cannot add the foreign key constraint

今天在寫資料庫作業時,遇到的無法建立外來鍵問題 create table department (dept_name varchar(20), building varchar(15),

MYSQL mysql 無法建立外來約束 及 errno: 121錯誤

對mysql資料庫不太熟悉,今天遇到了外來鍵建立問題。alter外來鍵建立語句命令列下提示成功了,但就是沒看到外來鍵。 後來改用workbench工具來建立,發現是因為資料預設是採用的MyISAM儲存引擎,該引擎不支援外來鍵,需要修改引擎為InnoDB才可以。 我直接在wo

mysql清空有外來關聯的表

第一種:(不要外來鍵約束) 手動刪除外來鍵約束; 刪除表資料   第二種:(保留外來鍵約束) SET FOREIGN_KEY_CHECKS = 0;   TRUNCATE TABLE 表名;  SET FOREIGN_KEY_CHECKS = 1; 

MySQL:使用SQL語句清空所有外來關聯

 解決辦法 查詢資料庫中所有外來鍵名稱然後拼接生成刪除語句,再複製執行 SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' DROP FOREIGN KEY ',CONSTRAINT_NAME,' ;') FROM

MySql外來關聯Foreign key及error 1452

文章出處:http://xuehu2009.iteye.com/blog/571138 今天往MySQL的一張表裡插記錄時,出現一個錯誤提示: ERROR 1452 : Cannot add or update a&

Mysql清空帶有外來關聯關係資料表

Mysql  清空資料庫表資料 truncate table wp_comments; delete * from wp_comments; delete from static.wp_comments;  MySql 清空帶有外來鍵的表資料 SET

Mysql中文亂碼以及建立外來報1215

今天使用Mysql報兩個錯誤,這裡記錄一下。 1、使用insert語句以及sqlyog插入中文字元顯示亂碼,核對資料庫編碼是utf8, 建表語句也設定了引擎和預設字符集: CREATE TABLE `department` (

MySql定義外來出現1005錯誤的原因

MySQL Error Number 1005 Can’t create table ‘.\mydb\#sql-328_45.frm’ (errno: 150) If you get this error while trying to create a foreign k

Mysql無法建立外來的原因

在Mysql中建立外來鍵時,經常會遇到問題而失敗,這是因為Mysql中還有很多細節需要我們去留意,我自己總結並查閱資料後列出了以下幾種常見原因。 1.  兩個欄位的型別或者大小不嚴格匹配。例如,如果一個是int(10),那麼外來鍵也必須設定成int(10),而不是int(1

MySQL 新建資料庫、建立索引、建立外來

本文通過命令操作資料庫的方式,以簡單會員表為例,為讀者簡述資料表的簡單設計及操作。 1.  新建資料庫: CREATE DATABASE 資料庫名;   2.  新建資料表: //Tab1

mysql 外來關聯限制

第一次接觸mysql,很簡單的兩張表關聯,當然可以採用mysql自帶的外來鍵限制來保證資料一致性,但是上網查了些資料。發現對於insert/update操作完全合乎我的需求邏輯,但是delete卻與我需要的完全相反,比如A表(A_id),B表(B_id, A_id),其中A