首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL创建表在DDL语句中添加额外行

MySQL创建表在DDL语句中添加额外行
EN

Stack Overflow用户
提问于 2020-01-15 21:51:00
回答 1查看 95关注 0票数 0

我将MySQL与InnoDB引擎结合使用。我创建了一个包含外键的新表,例如:

代码语言:javascript
运行
复制
CREATE TABLE rooms (
    id INTEGER NOT NULL AUTO_INCREMENT, 
    my_id VARCHAR(15), 
    house_id INTEGER, 
    PRIMARY KEY (id), 
    FOREIGN KEY(house_id) REFERENCES houses (id) ON DELETE CASCADE
)

当我使用DB工具(如DBeaver )查看我的数据库和表的详细信息时,我看到我的外键house_id缺少ON DELETE CASCADE设置,而且外键house_id似乎有2列条目。

DBeaver还显示了该表的DDL,如下所示:

代码语言:javascript
运行
复制
CREATE TABLE `rooms` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `my_id` varchar(15) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `house_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `house_id` (`house_id`),
  CONSTRAINT `rooms_ibfk_1` FOREIGN KEY (`house_id`) REFERENCES `houses` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

为什么DDL有额外的行KEY 'house_id' ('house_id').?这条额外的行还会导致我的外键在我的house_id表查看器中显示两个DBeaver列。如果我去掉这个,我的ON DELETE CASCADE就会被正确设置。

我使用ORM,所以我无法控制CREATE TABLE语句,所以我只是想至少了解这里发生了什么。

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-15 21:59:02

来自MySQL关于外键约束的文档

MySQL需要对外键和引用键进行索引,这样外键检查就可以快速而不需要表扫描。在“引用”表中,必须有一个索引,其中将外键列按相同顺序列为第一列。如果引用表不存在,则自动在该表上创建这样的索引。

因为house_id是在外键约束中使用的,而且它还没有索引,所以会自动添加索引。

我不认为DBeaver是两次展示专栏。它显示了列和索引,它们碰巧有相同的名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59760074

复制
相关文章

相似问题

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