MySQL Errno 150

Six*_*s17 21 mysql foreign-keys mysql-workbench

我正在创建一些简单的表,我无法通过这个外键错误,我不知道为什么.这是下面的脚本.

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

);
Run Code Online (Sandbox Code Playgroud)

错误代码:1005.无法创建表'336_project.sections'(错误号:150)

我的数据类型看起来相同,语法似乎正确.任何人都可以指出我在这里没有看到的东西吗?

我正在使用MySQL Workbench 5.2

Joh*_*hnL 35

如果您要关联不同类型的列,也会发生此错误,例如.源表中的int和目标表中的BigInt.

  • 或者引用的表没有InnoDB引擎 (3认同)

Ed *_*bbs 24

如果你正在使用InnoDB引擎,那ON DELETE SET DEFAULT就是你的问题.以下是手册的摘录:

虽然MySQL服务器允许SET DEFAULT,但它被InnoDB拒绝为无效.InnoDB表不允许使用此子句的CREATE TABLE和ALTER TABLE语句.

你可以使用ON DELETE CASCADEON DELETE SET NULL不使用ON DELETE SET DEFAULT.还有更多的信息在这里.


Ric*_*lli 18

你可以跑

SHOW ENGINE INNODB STATUS
Run Code Online (Sandbox Code Playgroud)

以人类可读的格式阅读失败的原因

例如

------------------------
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.
Run Code Online (Sandbox Code Playgroud)

  • 这是宝物!这也有助于诊断其他问题。 (2认同)