首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql 8.0外键在InnoDB中丢失

MySql 8.0外键在InnoDB中丢失
EN

Database Administration用户
提问于 2021-11-04 15:54:08
回答 1查看 170关注 0票数 1

我使用MySql引擎在InnoDB 8.0中创建了10个表。我使用references语句定义了关系。

当我使用show create table查看表时,外键就会丢失。我还做了一个mysqldump,其中的键也丢失了。

我的外键去哪了?

这是其中一张表的示例。

代码语言:javascript
复制
create table test (
testNumber bigint not null primary key auto_increment,
productNumber bigint not null references product (productNumber) on delete cascade on update cascade 

);
EN

回答 1

Database Administration用户

回答已采纳

发布于 2021-11-04 16:03:18

请给我们看看你用的CREATE TABLE的一个例子。

我怀疑您使用了内联引用(它们被忽略了)。如果是这样的话,请参阅MySQL文档,CREATE TABLE语句,其中它声明:

MySQL解析但忽略了“内联REFERENCES规范”(如SQL标准中定义的),其中引用被定义为列规范的一部分。MySQL在指定为 FOREIGN KEY 规范的一部分时接受only子句。有关更多信息,请参见第1.7.2.3节,“FOREIGN KEY约束差异“

(在上面的第二个文档页中有更多的细节)。

  • MySQL解析但忽略了“内联REFERENCES规范”(如SQL标准中定义的),其中引用被定义为列规范的一部分。MySQL只在指定为单独FOREIGN KEY规范的一部分时才接受D14子句。
  • 定义列以使用REFERENCES tbl_name(col_name)子句没有实际效果,只是作为备注或注释,说明您当前定义的列意在引用另一个表中的列。在使用此语法时,必须认识到:
    • MySQL不执行任何类型的检查,以确保col_name确实存在于tbl_name中(甚至tbl_name本身也存在)。
    • MySQL不会在tbl_name上执行任何类型的操作,比如根据要定义的表中行上的操作删除行;换句话说,这种语法不会导致任何ON DELETEON UPDATE行为。(虽然您可以编写ON DELETEON UPDATE子句作为REFERENCES子句的一部分,但<#>it也被忽略了。)
    • 此语法创建列;它不创建任何类型的索引或键。

例如,以下定义创建了列,但does没有创建外键REFERENCES person(id) (为正确性进行了分析,但) <#>has <#>has<#>has not (根本不影响),没有创建外键,也没有索引:

代码语言:javascript
复制
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中创建外键,则必须使用以下语法--这确实创建了外键(以及索引):

代码语言:javascript
复制
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
);
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/302130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档