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

MySQL CREATE TABLE adds extra line into DDL statement

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

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 等数据库工具查看我的数据库和这个 table 的详细信息时,我发现我的外键 house_id 缺少 ON DELETE CASCADE 设置,而且外键 house_id 似乎有 2 列条目。

DBeaver 还显示此 table 的 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 table 查看器中显示 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 不会两次显示该列。它显示列和索引,它们恰好具有相同的名称。