错误 1452 (23000)

ERROR 1452 (23000)

我的脚本出现这个错误:

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (hbm248_BucherFilms1.films, CONSTRAINT films_ibfk_1 FOREIGN KEY (country) REFERENCES 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;

非常感谢任何帮助!

"ENGINE = INNODB" 不是 create table 语句的一部分。删除这两个 table 的第一个分号。

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 roles (roles)); <-- this one
ENGINE = INNODB;

计划 A:按正确的顺序加载 table。 (在需要 country 的任何 table 之前加载 Countries。等等)

B 计划:DISABLE KEYS ... 加载 ...ENABLE KEYS