【发布时间】:2015-05-03 01:47:13
【问题描述】:
我的脚本出现此错误:
ERROR 1452 (23000):无法添加或更新子行:外键 约束失败(
hbm248_BucherFilms1.films, CONSTRAINTfilms_ibfk_1外键 (country) 引用countries(country))
我想使用 INNODB,但不明白是什么导致了该错误。我所有的外键都排成一行。什么是films_ibfk_1?
这是脚本。
谢谢!
-- create the countries table
DROP TABLE IF EXISTS countries;
CREATE TABLE countries (
country varchar (50) NOT NULL,
PRIMARY KEY(country))
ENGINE = INNODB;
LOAD DATA LOCAL INFILE "Countries.csv"
INTO TABLE countries
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
-- create the film_stock table
DROP TABLE IF EXISTS film_stock;
CREATE TABLE film_stock (
stock varchar (10) NOT NULL,
PRIMARY KEY(stock))
ENGINE = INNODB;
LOAD DATA LOCAL INFILE "FilmStock.csv"
INTO TABLE film_stock
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
-- create the film_gauge table
DROP TABLE IF EXISTS film_gauge;
CREATE TABLE film_gauge (
gauge varchar (10) NOT NULL,
PRIMARY KEY(gauge))
ENGINE = INNODB;
LOAD DATA LOCAL INFILE "FilmGauge.csv"
INTO TABLE film_gauge
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
-- create the bw_or_color table
DROP TABLE IF EXISTS bw_or_color;
CREATE TABLE bw_or_color (
bw_color varchar (10) NOT NULL,
PRIMARY KEY(bw_color))
ENGINE = INNODB;
LOAD DATA LOCAL INFILE "BW_color.csv"
INTO TABLE bw_or_color
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
-- create the crew_roles table
DROP TABLE IF EXISTS roles;
CREATE TABLE crew_roles (
roles varchar (15) NOT NULL,
PRIMARY KEY(roles))
ENGINE = INNODB;
LOAD DATA LOCAL INFILE "Roles.csv"
INTO TABLE crew_roles
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
-- create the people table
DROP TABLE IF EXISTS people;
CREATE TABLE people (
full_name varchar (50) NOT NULL,
people_ID varchar (15) NOT NULL,
date_of_birth DATE,
date_of_death DATE,
PRIMARY KEY(people_ID))
ENGINE = INNODB;
LOAD DATA LOCAL INFILE "People.csv"
INTO TABLE people
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
-- create the cast_members table
DROP TABLE IF EXISTS cast_members;
CREATE TABLE cast_members (
cast_ID int AUTO_INCREMENT,
title varchar (50) NOT NULL,
full_name varchar (50) NOT NULL,
roles varchar (15) NOT NULL,
PRIMARY KEY(cast_ID),
FOREIGN KEY(title) REFERENCES films (title),
FOREIGN KEY(full_name) REFERENCES people (full_name),
FOREIGN KEY(roles) REFERENCES crew_roles (roles))
ENGINE = INNODB;
LOAD DATA LOCAL INFILE "CastMembers.csv"
INTO TABLE cast_members
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
-- create the films table
DROP TABLE IF EXISTS films;
CREATE TABLE films (
title varchar (100) NOT NULL,
alternate_title varchar (50) NULL,
year_of_release varchar (15) NULL,
country varchar (50) NULL,
running_time_minutes int (10) NULL,
footage_lenght_feet int (10) NULL,
stock varchar (10) NULL,
gauge varchar (10) NULL,
bw_color varchar (10) NULL,
notes varchar (255) NULL,
print_publications varchar (255) NULL,
existent_print varchar (255) NULL,
url_1 varchar (100) NULL,
url_2 varchar (100) NULL,
url_3 varchar (100) NULL,
PRIMARY KEY(title),
FOREIGN KEY(country) REFERENCES countries (country),
FOREIGN KEY(stock) REFERENCES film_stock (stock),
FOREIGN KEY(bw_color) REFERENCES bw_or_color (bw_color),
FOREIGN KEY(gauge) REFERENCES film_gauge (gauge))
ENGINE = INNODB;
LOAD DATA LOCAL INFILE "Films.csv"
INTO TABLE films
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
非常感谢任何帮助!
【问题讨论】:
-
可能是这一行:FOREIGN KEY(film_gauge) REFERENCES film_gauge (film_gauge));
-
我试过了,得到:错误 1452 (23000): 无法添加或更新子行:外键约束失败 (
hbm248_BucherFilms1.films, CONSTRAINTfilms_ibfk_1FOREIGN KEY (@ 987654331@) 参考countries(country)) -
外键类型必须匹配。一个是 varchar(50),另一个是 varchar(20)。
-
我解决了这个问题,但没有解决问题。同样的错误。
-
在
film_gauge表中有一个film_gauge列,然后有一个名为film_gauge的外键引用film_gauge(film_gauge),在我看来是一个非常糟糕的主意,但也许这就是我。这有点像乔治·福尔曼给他所有的男孩起名George;当您想知道当您阅读 George is a bad boy today 时所指的是哪一个时,这可能有点令人困惑。
标签: mysql foreign-keys innodb