Innodb
InnoDB 中缺少 MySql 8.0 外鍵
我使用 InnoDB 引擎在 MySql 8.0 中創建了 10 個表。
references
我使用該語句定義了關係。當我使用 查看表時
show create table
,缺少外鍵。我還做了一個 mysqldump,其中的鍵也失去了。我的外鍵去哪兒了?
這是其中一張表的範例。
create table test ( testNumber bigint not null primary key auto_increment, productNumber bigint not null references product (productNumber) on delete cascade on update cascade );
CREATE TABLE
請向我們展示您使用的範例。我懷疑您使用了內聯引用(被忽略)。如果是這種情況,請參閱 MySQL 文件
CREATE TABLE
Statement,其中指出:MySQL 解析但忽略“內聯
REFERENCES
規範”(如 SQL 標準中所定義),其中引用被定義為列規範的一部分。MySQL僅在指定為單獨****規範REFERENCES
的一部分時才接受子句。有關詳細資訊,請參閱第 1.7.2.3 節,“約束差異”。FOREIGN KEY
FOREIGN KEY
(以上第二個文件頁面中的更多詳細資訊)。
- MySQL 解析但忽略“內聯
REFERENCES
規範”(如 SQL 標準中所定義),其中引用被定義為列規範的一部分。MySQLREFERENCES
僅在指定為單獨FOREIGN KEY
規範的一部分時才接受子句。- 定義一個列以使用
REFERENCES tbl_name(col_name)
子句沒有實際效果,僅作為一個備忘錄或註釋,您目前定義的列旨在引用另一個表中的列。使用此語法時,重要的是要意識到:+ MySQL 不執行任何類型的檢查來確保 col_name 確實存在於 tbl_name 中(或者甚至 tbl_name 本身存在)。 + MySQL 不會對 tbl_name 執行任何類型的操作,例如刪除行以響應對您正在定義的表中的行採取的操作;換句話說,這種語法不會導致任何
ON DELETE
行為ON UPDATE
。(雖然你可以寫一個ON DELETE
orON UPDATE
子句作為子句的一部分REFERENCES
,它也被忽略了。) + 此語法創建一列;它不會創建任何類型的索引或鍵。例如,以下定義創建列但不創建外鍵,
REFERENCES person(id)
(被解析為正確但)根本沒有效果,沒有創建外鍵,也沒有索引:CREATE TABLE shirt ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, style ENUM('t-shirt', 'polo', 'dress') NOT NULL, color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL, owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id), PRIMARY KEY (id) );
如果要在 MySQL 中創建外鍵,則必須改用以下語法 - 它確實創建了外鍵(以及索引):
CREATE TABLE shirt ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, style ENUM('t-shirt', 'polo', 'dress') NOT NULL, color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL, owner SMALLINT UNSIGNED NOT NULL, PRIMARY KEY (id), FOREIGN KEY (owner) REFERENCES person(id), -- creates an FK );