在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类型的位置/内容是什么?
当我在寻找外键约束的解决方案时,我发现只有数据类型匹配的信息,而不是执行的顺序。感谢。
答案 0 :(得分:1)
是否因为尚未创建表而导致错误,因此它不知道Genre表PK类型的位置/内容是什么?
Yes.
如果首先定义Movies
表,MySQL将尝试查找引用的Genres
表,该表尚不存在。所以你应该以相反的顺序创建它们:
CREATE TABLE IF NOT EXISTS Genres
CREATE TABLE IF NOT EXISTS Movies
答案 1 :(得分:0)
外键是对另一个键的引用:主键。如果现在不存在主键,则无法引用未知事物,因此会出现异常。