亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MySQL使用ForeignKeys創建表并給出errno:150

MySQL使用ForeignKeys創建表并給出errno:150

慕田峪4524236 2019-06-03 16:38:54
MySQL使用ForeignKeys創建表并給出errno:150我試圖用兩個外鍵在MySQL中創建一個表,這兩個外鍵引用了另外兩個表中的主鍵,但是我得到了一個errno:150錯誤,它不會創建這個表。以下是所有3個表的SQL:CREATE TABLE role_groups (   `role_group_id` int(11) NOT NULL `AUTO_INCREMENT`,   `name` varchar(20),   `description` varchar(200),   PRIMARY KEY (`role_group_id`)) ENGINE=InnoDB;CREATE TABLE IF NOT EXISTS `roles` (   `role_id` int(11) NOT NULL AUTO_INCREMENT,   `name` varchar(50),   `description` varchar(200),   PRIMARY KEY (`role_id`)) ENGINE=InnoDB;create table role_map (   `role_map_id` int not null `auto_increment`,   `role_id` int not null,   `role_group_id` int not null,   primary key(`role_map_id`),   foreign key(`role_id`) references roles(`role_id`),   foreign key(`role_group_id`) references role_groups(`role_group_id`)) engine=InnoDB;任何幫助都將不勝感激。
查看完整描述

4 回答

?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

MySQL通用的“errno 150”消息表示未正確形成外鍵約束。“正如您可能已經知道的,如果您正在閱讀此頁面,一般的“errno:150”錯誤消息實際上是沒有幫助的。然而:

你可以得到實際通過運行錯誤消息SHOW ENGINE INNODB STATUS;然后尋找LATEST FOREIGN KEY ERROR在輸出中。

例如,試圖創建外鍵約束:

CREATE TABLE t1(id INTEGER);CREATE TABLE t2(t1_id INTEGER,
 CONSTRAINT FOREIGN KEY (t1_id) REFERENCES t1 (id));

錯誤失敗Can't create table 'test.t2' (errno: 150)..這不會告訴任何人任何有用的東西,除了這是一個外鍵問題。但是跑SHOW ENGINE INNODB STATUS;它會說:

------------------------
LATEST FOREIGN KEY ERROR
------------------------
130811 23:36:38 Error in foreign key constraint of table test/t2:
FOREIGN KEY (t1_id) REFERENCES t1 (id)):
Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.

它說問題在于它找不到索引。SHOW INDEX FROM t1顯示表中根本沒有索引。t1..通過,比如說,定義主鍵來解決這個問題。t1,將成功創建外鍵約束。


查看完整回答
反對 回復 2019-06-03
?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

確保您試圖使用約束鏈接的兩個字段的屬性完全相同。

通常,ID列上的“unsigned”屬性會捕獲您。

ALTER TABLE `dbname`.`tablename` CHANGE `fieldname` `fieldname` int(10) UNSIGNED NULL;


查看完整回答
反對 回復 2019-06-03
?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

運行此腳本時,數據庫的當前狀態如何?完全是空的嗎?在從頭創建數據庫時,您的SQL運行良好,但errno 150通常與刪除和重新創建作為外鍵一部分的表有關。我有種感覺,你不是在用一個100%新鮮的新數據庫。

如果您在對SQL文件進行“source”時出錯,您應該能夠在MySQL提示符“Source”命令之后立即運行命令“Show Engine INNODB Status”,以查看更詳細的錯誤信息。

您可能也需要查看手冊條目:

如果您重新創建一個被刪除的表,它必須有一個符合引用它的外鍵約束的定義。如前面所述,它必須具有正確的列名和類型,并且必須在引用的鍵上有索引。如果不滿足這些要求,MySQL將返回錯誤號1005,并在錯誤消息中引用錯誤150。如果MySQL從CREATETABLE語句中報告錯誤號1005,并且錯誤消息引用錯誤150,則表創建失敗,因為外鍵約束沒有正確形成。

— MySQL 5.1參考手冊.


查看完整回答
反對 回復 2019-06-03
  • 4 回答
  • 0 關注
  • 822 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號