Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 第150号_Mysql_Foreign Keys_Mysql Workbench - Fatal编程技术网

Mysql 第150号

Mysql 第150号,mysql,foreign-keys,mysql-workbench,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, PRIM

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

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_项目.节”(错误号:150)

我的数据类型似乎相同,语法似乎正确。有人能指出我在这里没有看到什么吗

我正在使用MySQL Workbench 5.2,它在

ON DELETE set default 
我以前没有遇到过这种情况,在手册中也没有看到(但现在已经晚了)

更新

刚刚在电视上看到这个

虽然MySQL服务器允许设置默认值,但它被拒绝为 InnoDB无效。使用以下命令创建TABLE和ALTER TABLE语句 InnoDB表不允许使用子句


我猜您可能正在使用InnoDB表?

如果您正在使用InnoDB引擎,则删除时的
设置默认值是您的问题。以下是手册的摘录:

虽然MySQL服务器允许设置默认值,但InnoDB将其视为无效而拒绝。InnoDB表不允许使用此子句的CREATE TABLE和ALTER TABLE语句


您可以在删除级联时使用
,或在删除集空时使用
,但在删除集默认值时不能使用
。还有更多信息。

如果您在删除时根本没有指定
,而是试图从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;

以上将抛出错误150。需要将第一个表也更改为InnoDB才能工作。

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

这里的问题是数据库引擎(表1
MYISAM
和表2
engine
)。 要设置外键

  • 两个表必须位于同一引擎和同一字符集中
  • 父列和FK列中的PK列必须具有相同的数据类型和排序规则类型
希望你有主意。

你可以跑步了

SHOW ENGINE INNODB STATUS
以可读格式读取故障原因

e、 g


确保表类型为InnoDB,MyISAM不支持外键,afaik。

为了完整性起见-如果对当时未定义的表进行外部引用,也会出现此错误

为了参照另一个表创建一个
外键
,两个表中的键应该是
主键
,并且具有相同的数据类型


在您的表部分中,
主键
属于不同的数据类型,即
INT
,但在另一个表中,它属于类型,即
VARCHAR

嗨,谢谢你的快速回复。我试着将设置为NULL,但仍然不起作用。我甚至删除了所有的更新/删除行,但仍然给出了错误。我应该指定要使用的特定引擎吗?忽略最后的注释,我已经修复了它。您是对的,我必须将默认值更改为null,但我还必须为每个外键引用创建索引。一旦我做到了,它就成功了@Sixers17-正如您所知,当我在这里尝试您的
CREATE TABLE
语句时,我要做的唯一一件事就是将DELETE SET NULL更改为
。我不必添加索引。这就是说,不管怎样,在FK上有索引是个好主意,所以一切都很好:)嗯,很有趣,我想知道为什么我的没有索引就不能工作。我注意到你也不能将列设置为
notnull
。发现将DELETE RESTRICT
列上的
迁移到DELETE SET NULL
列上的
。我应该在表声明之后放置Engine=InnoDB吗?或者引用的表没有InnoDB Engine这是我的问题。我使用的是Laravel,我的父列是“增量”列。我不得不将我的引用列更改为未签名整数。这是宝藏!这也有助于诊断其他问题。
------------------------
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.