mysql - SQL外键执行顺序约束

标签 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)
);

无法添加外键约束

但是当首先创建 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/

相关文章:

mysql - Postgresql 中 ELT() 函数的替代方法是什么?

MySQL连接不同的表

php - 学习mysqli和pdo

mysql - 如何在单个查询mysql中选择多个表? (部分表还没有数据)

mysql - 如何通过左连接合并2个表中的数据,形成聚合而不重复记录

php - 将表单数据插入 MySQL?

php - 使用 PHP 和 AJAX 将数据从表单加载到 MySQL

mysql - MariaDB 显示列权限

php - mysqli_fetch 函数的差异

javascript - 按国家名称排序