gpt4 book ai didi

mysql - 将列添加到现有的唯一键?

转载 作者:行者123 更新时间:2023-12-01 08:17:37 27 4
gpt4 key购买 nike

我在 mysql 中创建了下表。

 CREATE TABLE `postitem` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`createdAt` datetime DEFAULT NULL,
`item_name` varchar(255) NOT NULL,
`createdBy_id` bigint(20) NOT NULL,
`post_category_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UK_4cscn0qw8u7go5hvmofq0ersg` (`post_category_id`,`item_name`),
KEY `FK_ncg8dotnqoetaiem6hiokvpwy` (`createdBy_id`),
CONSTRAINT `FK_ncg8dotnqoetaiem6hiokvpwy` FOREIGN KEY (`createdBy_id`) REFEREN CES `applicationuser` (`id`),
CONSTRAINT `FK_nfh1xw0eqqu9wg5hhl7iqdk56` FOREIGN KEY (`post_category_id`) REF ERENCES `postcategory` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=737 DEFAULT CHARSET=utf8 |

现在我需要再添加一列 createdBy_idUNIQUE KEY。我该怎么做?

最佳答案

您可以删除现有约束,然后使用新字段重新创建它。我建议同时将其重命名为更合适的名称:

ALTER TABLE `postitem` DROP INDEX `UK_4cscn0qw8u7go5hvmofq0ersg`;
ALTER TABLE `postitem` ADD CONSTRAINT `UK_Post_Item_CreatedBy`
UNIQUE (`post_category_id`,`item_name`, `createdBy_id`);

编辑:重新外键约束

由于您正在更改约束的唯一性,所有通过上述 UKC 引用您的 postitem 表的表现在都需要重新建模以适应新列 createdBy_id 同样。因此,对于每个这样的引用表,您都需要

  • 删除 FOREIGN KEY 约束
  • 添加新的 createdBy_id 列(相同类型)

现在你可以

  • 删除 postitem 上的唯一键约束
  • 在带有额外列的 postitem 上添加新的唯一键约束

再次为每个引用表

  • 添加一个新的外键约束引用 postitem(post_category_id, item_name, createdBy_id))

但是,此时我建议您重新考虑此处的表格设计。 postitem 表上有一个主键 id,IMO 通常更适合引用外键约束。也就是说,我建议您:

  • 如上删除引用表的外键约束
  • 删除这些表中的列 post_category_iditem_name
  • 相反,向这些表中添加一个新列 postitemid bigint(20)
  • 创建一个新的 FOREIGN KEY 约束,从 otherTable.postitemidpostitem(id)

显然,这现在可能会对您系统的其余部分产生巨大影响。

简单代理键(如 AUTO_INCREMENT INTs)的主要好处之一是它们更能适应变化,我想我们刚刚在这里证明了这一点。

关于mysql - 将列添加到现有的唯一键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29862128/

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