gpt4 book ai didi

mysql防止多字段的冗余记录

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

我这里有个问题。我有一个包含以下架构的表:

id : int(11) not null primary key
name : varchar(255) not null
status : enum('ACTIVE','DELETED')

注意:记录是“软删除”的,我们只是将状态标记为“已删除”。

问题是我不希望这个家伙能够通过 2 个不同的线程创建同名(冗余)的条目,除非数据库中的现有记录处于“已删除”状态。有什么可能的方法来做到这一点?

我不能只对名称+状态进行唯一索引,因为如果我们在“DELETED”中有一个项目(具有相同的名称),而我想要删除的区域是“ACTIVE”,则会在我标记时发生错误要“删除”的区域。

最佳答案

如何在您的数据中添加一个 deleted_at 字段?然后你可以在名称 + 状态 + deleted_at 上有一个唯一的键。当 status = ACTIVE 时,deleted_at 只能有一个值,这样会使唯一性仅在名称上。

编辑 为清楚起见:

CREATE TABLE mytable (
id int not null primary key,
name varchar(255) not null,
status enum('active','delete'),
deleted_at datetime not null default 0,
UNIQUE KEY one_active (name, status, deleted_at)
);

编辑 #2:实际上,如果您让“检查是否已删除”代码检查 deleted_at > 0 而不是检查 status=deleted,那么您甚至不需要状态字段。

关于mysql防止多字段的冗余记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10779620/

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