簡體   English   中英

SQL外鍵執行約束的順序

[英]SQL foreign key order of execution constraints

在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

但是,當首先創建流派表時,該錯誤不再存在:

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類型在哪里/是什么?

當我尋找外鍵約束的解決方案時,我發現的只是有關數據類型匹配的信息,而不是執行順序。 謝謝。

是因為尚未創建表而導致錯誤,所以它不知道流派表PK類型在哪里/是什么?

Yes.

如果首先定義Movies表,MySQL將嘗試查找所引用的Genres表,該表尚不存在。 因此,您應該以相反的順序創建它們:

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

外鍵是對另一個鍵的引用:主鍵。 如果主鍵現在不存在,則無法引用未知事物,因此會出現異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM