gpt4 book ai didi

python - MySQL CREATE TABLE 在 DDL 语句中添加额外的行

转载 作者:行者123 更新时间:2023-11-29 09:25:01 24 4
gpt4 key购买 nike

我正在使用带有 InnoDB 引擎的 MySQL。我创建一个包含外键的新表,例如:

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
)

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

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

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').?这条额外的行还会导致我的外键在 DBeaver 表查看器中显示 2 个 house_id 列。如果我摆脱了这个,我的 ON DELETE CASCADE 就会被正确设置。

我使用的是 ORM,因此无法控制 CREATE TABLE 语句,因此我只是想至少了解这里发生的情况。

谢谢

最佳答案

摘自 Foreign Key Constraints 上的 MySQL 文档:

MySQL requires indexes on foreign keys and referenced keys so that foreign key checks can be fast and not require a table scan. In the referencing table, there must be an index where the foreign key columns are listed as the first columns in the same order. Such an index is created on the referencing table automatically if it does not exist.

由于 house_id 用于外键约束,并且它还没有索引,因此会自动添加索引。

我认为 DBeaver 没有将该列显示两次。它显示了列和索引,并且它们恰好具有相同的名称。

关于python - MySQL CREATE TABLE 在 DDL 语句中添加额外的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59760074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com