SQL外键执行约束顺序

时间:2018-03-09 06:03:10

标签: mysql

在MySQL语句中创建主/外键链接时,执行顺序是否重要?

例如,以下代码将产生错误:"无法添加外键约束"

CREATE TABLE IF NOT EXISTS Movies 
(
    MovieID INT NOT NULL AUTO_INCREMENT,
    GenreID INT NOT NULL,
    PRIMARY KEY(MovieID), 
    FOREIGN KEY(GenreID) References Genres(GenreID)
);

CREATE TABLE IF NOT EXISTS Genres
(
    GenreID INT NOT NULL AUTO_INCREMENT,
    GenreName   VARCHAR(30),
    Primary key (GenreID)
);

Cannot add foreign key constraint

但是当首次创建Genre表时,错误不再存在:

CREATE TABLE IF NOT EXISTS Genres
(
    GenreID INT NOT NULL AUTO_INCREMENT,
    GenreName   VARCHAR(30),
    Primary key (GenreID)
);

CREATE TABLE Movies 
(
    MovieID INT NOT NULL AUTO_INCREMENT,
    GenreID INT NOT NULL,
    PRIMARY KEY(MovieID), 
    FOREIGN KEY(GenreID) References Genres(GenreID)
);

Schema Ready

是否因为表尚未创建而导致错误,因此它不知道类型表PK类型的位置/内容是什么?

当我在寻找外键约束的解决方案时,我发现只有数据类型匹配的信息,而不是执行的顺序。感谢。

2 个答案:

答案 0 :(得分:1)

  

是否因为尚未创建表而导致错误,因此它不知道Genre表PK类型的位置/内容是什么?

Yes.

如果首先定义Movies表,MySQL将尝试查找引用的Genres表,该表尚不存在。所以你应该以相反的顺序创建它们:

CREATE TABLE IF NOT EXISTS Genres
CREATE TABLE IF NOT EXISTS Movies

答案 1 :(得分:0)

外键是对另一个键的引用:主键。如果现在不存在主键,则无法引用未知事物,因此会出现异常。