我正在MySQL工作台上运行这个查询,MySQL的最新版本安装在MacOS上。我的SQL查询是:
CREATE DATABASE IF NOT EXISTS `imdb`;
USE `imdb`;
DROP TABLE IF EXISTS `rating`;
DROP TABLE IF EXISTS `media`;
CREATE TABLE `media` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(70) DEFAULT NULL,
`year` varchar(70) DEFAULT NULL,
`rated` varchar(70) DEFAULT NULL,
`released` varchar(70) DEFAULT NULL,
`runtime` varchar(70) DEFAULT NULL,
`genre` varchar(70) DEFAULT NULL,
`director` varchar(70) DEFAULT NULL,
`writer` varchar(70) DEFAULT NULL,
`actors` varchar(70) DEFAULT NULL,
`plot` varchar(7000) DEFAULT NULL,
`language` varchar(70) DEFAULT NULL,
`country` varchar(70) DEFAULT NULL,
`awards` varchar(70) DEFAULT NULL,
`poster` varchar(270) DEFAULT NULL,
`metascore` varchar(70) DEFAULT NULL,
`imdb_rating` varchar(70) DEFAULT NULL,
`imdb_votes` varchar(70) DEFAULT NULL,
`imdb_id` varchar(70) NOT NULL,
`type` varchar(70) DEFAULT NULL,
`dvd` varchar(70) DEFAULT NULL,
`box_office` varchar(70) DEFAULT NULL,
`production` varchar(70) DEFAULT NULL,
`website` varchar(70) DEFAULT NULL,
`response` varchar(70) DEFAULT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `rating` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`source` varchar(70) DEFAULT NULL,
`value` varchar(70) DEFAULT NULL,
`imdb_id` varchar(70) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`imdb_id`)
REFERENCES `media`(`imdb_id`)
ON DELETE SET NULL
);
SET FOREIGN_KEY_CHECKS = 1;表评等上的创建查询失败。我不知道为什么,任何帮助都会很感激。
准确的错误响应是:
10:12:44
CREATE TABLE `rating` ( `id` int(11) NOT NULL AUTO_INCREMENT, `source` varchar(70) DEFAULT NULL, `value` varchar(70) DEFAULT NULL, `imdb_id` varchar(70) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`imdb_id`) REFERENCES `media`(`imdb_id`) ON DELETE SET NULL )错误代码: 1215。无法添加外键约束
0.123秒
我正在构建一个Spring应用程序,它使用太多的关系来构建IMDB数据库的本地副本或类似的东西。
发布于 2018-05-31 05:05:36
MySQL中的外键实际上不必引用主键列,但它必须引用唯一的列。因此,这里的一个可能的解决方法是在imdb_id列上添加一个唯一的约束:
ALTER TABLE media ADD CONSTRAINT cstr_imdb UNIQUE (imdb_id);发布于 2018-05-31 05:01:59
外键是关系数据库表中的列或列组,它提供两个表中的数据之间的链接。它作为表之间的交叉引用,因为它引用了另一个表的主键,从而在它们之间建立了一个链接。
“id”是表“media”中的主键,而不是“imdb_id”。因此,您不能引用“imdb_id”。
发布于 2018-05-31 05:01:18
imdb_id不是媒体表上的键-外键必须引用键(或者,至少是唯一的约束)。如果媒体表上的imdb_id应该是唯一的,那么您可以在它上设置一个唯一的约束,并且能够用外键引用它。
此外,在不能为空的列上有一个delete set null。
https://stackoverflow.com/questions/50616824
复制相似问题