在 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)
);
无法添加外键约束
但是当首先创建 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)
);
架构就绪
这个错误是因为表还没有创建,所以不知道流派表的PK类型在哪里/是什么?
当我寻找外键约束的解决方案时,我发现的只是数据类型匹配的信息,而不是执行顺序的信息。谢谢。
最佳答案
Is the error caused because the table hasn't been created yet, so it doesn't know where / what the Genre tables PK type is?
Yes.
如果您首先定义Movies
表,MySQL将尝试查找引用的Genres
表,该表尚不存在。所以你应该以相反的顺序创建它们:
CREATE TABLE IF NOT EXISTS Genres
CREATE TABLE IF NOT EXISTS Movies
关于mysql - SQL外键执行顺序约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49187528/