我使用MySql引擎在InnoDB 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
);发布于 2021-11-04 16:03:18
请给我们看看你用的CREATE TABLE的一个例子。
我怀疑您使用了内联引用(它们被忽略了)。如果是这样的话,请参阅MySQL文档,CREATE TABLE语句,其中它声明:
MySQL解析但忽略了“内联
REFERENCES规范”(如SQL标准中定义的),其中引用被定义为列规范的一部分。MySQL在指定为FOREIGN KEY规范的一部分时接受only子句。有关更多信息,请参见第1.7.2.3节,“FOREIGN KEY约束差异“。
(在上面的第二个文档页中有更多的细节)。
REFERENCES规范”(如SQL标准中定义的),其中引用被定义为列规范的一部分。MySQL只在指定为单独FOREIGN KEY规范的一部分时才接受D14子句。REFERENCES tbl_name(col_name)子句没有实际效果,只是作为备注或注释,说明您当前定义的列意在引用另一个表中的列。在使用此语法时,必须认识到:ON DELETE或ON UPDATE行为。(虽然您可以编写ON DELETE或ON UPDATE子句作为REFERENCES子句的一部分,但<#>it也被忽略了。)例如,以下定义创建了列,但does没有创建外键,REFERENCES person(id) (为正确性进行了分析,但) <#>has <#>has<#>has not (根本不影响),没有创建外键,也没有索引:
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
);https://dba.stackexchange.com/questions/302130
复制相似问题