[英]MySQL Errno 150
我正在創建一些簡單的表,我無法通過這個外鍵錯誤,我不知道為什么。 這是下面的腳本。
create TABLE Instructors (
ID varchar(10),
First_Name varchar(50) NOT NULL,
Last_Name varchar(50) NOT NULL,
PRIMARY KEY (ID)
);
create table Courses (
Course_Code varchar(10),
Title varchar(50) NOT NULL,
PRIMARY KEY (Course_Code)
);
create table Sections (
Index_No int,
Course_Code varchar(10),
Instructor_ID varchar(10),
PRIMARY KEY (Index_No),
FOREIGN KEY (Course_Code) REFERENCES Courses(Course_Code)
ON DELETE cascade
ON UPDATE cascade,
FOREIGN KEY (Instructor_ID) REFERENCES Instructors(ID)
ON DELETE set default
);
錯誤代碼:1005。無法創建表'336_project.sections'(錯誤號:150)
我的數據類型看起來相同,語法似乎正確。 任何人都可以指出我在這里沒有看到的東西嗎?
我正在使用MySQL Workbench 5.2
如果您要關聯不同類型的列,也會發生此錯誤,例如。 源表中的int和目標表中的BigInt。
如果您正在使用InnoDB引擎,那么ON DELETE SET DEFAULT
就是您的問題。 以下是手冊的摘錄:
雖然MySQL服務器允許SET DEFAULT,但它被InnoDB拒絕為無效。 InnoDB表不允許使用此子句的CREATE TABLE和ALTER TABLE語句。
您可以使用ON DELETE CASCADE
或ON DELETE SET NULL
,但不能使用ON DELETE SET DEFAULT
。 還有更多的信息在這里 。
你可以跑
SHOW ENGINE INNODB STATUS
以人類可讀的格式閱讀失敗的原因
例如
------------------------
LATEST FOREIGN KEY ERROR
------------------------
150331 15:51:01 Error in foreign key constraint of table foobar/#sql-413_81:
FOREIGN KEY (`user_id`) REFERENCES `foobar`.`users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE:
You have defined a SET NULL condition though some of the columns are defined as NOT NULL.
如果你沒有指定ON DELETE
但是試圖從InnoDB表引用MYISAM表,也可能是這種情況:
CREATE TABLE `table1`(
`id` INT UNSIGNED NOT NULL,
`name` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MYISAM CHARACTER SET UTF8;
CREATE TABLE `table2`(
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`table1_id` INT UNSIGNED NOT NULL,
`some_value` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `fk_table1_id`(`table1_id`),
CONSTRAINT FOREIGN KEY (`table1_id`) REFERENCES `table1`(`id`)
) ENGINE=INNODB CHARACTER SET UTF8;
以上將拋出errno 150 。 需要將第一個表更改為InnoDB才能使其正常工作。
為了創建引用另一個表的FOREIGN KEY
,兩個表中的鍵應該是PRIMARY KEY
並且具有相同的數據類型。
在您的表部分中, PRIMARY KEY
具有不同的數據類型,即INT
但在另一個表中,它的類型是VARCHAR
。
它失敗了
ON DELETE set default
我之前沒有遇到過這種情況,我也沒有在手冊中看到它(但后來才推遲)
更新
剛剛在手冊中看到了這一點
雖然MySQL服務器允許SET DEFAULT,但它被InnoDB拒絕為無效。 InnoDB表不允許使用此子句的CREATE TABLE和ALTER TABLE語句。
我想你可能正在使用InnoDB表?
這里問題出現在數據庫引擎中(table1 MYISAM
和table2 ENGINE
)。 要設置FOREIGN KEYs,
希望你有個主意。
確保表類型為InnoDB,MyISAM不支持外鍵,afaik。
為了完整起見 - 如果您對當時未定義的表進行外部引用,您也會收到此錯誤;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.