[英]Creating Create Table statements for Redshift by reading Oracle DDL statement in python
[英]MySQL CREATE TABLE adds extra line into DDL statement
我正在将 MySQL 与 InnoDB 引擎一起使用。 我创建了一个包含外键的新表,例如:
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
语句,所以我只是想至少了解这里发生了什么。
谢谢,
来自关于外键约束的 MySQL 文档:
MySQL 需要外键和引用键的索引,以便外键检查可以快速并且不需要表扫描。 在引用表中,必须有一个索引,其中外键列以相同的顺序列为第一列。 如果引用表不存在,则会在引用表上自动创建此类索引。
由于house_id
用于外键约束,并且它还没有索引,因此会自动添加索引。
我认为 DBeaver 不会两次显示该列。 它显示了列和索引,而且它们碰巧具有相同的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.