我们正在开发一个由mysql数据库支持的spring-boot应用程序,我有一个问题找不到答案,尽管这里有几个类似的问题。问题是,如果运行多个并行的相同insert语句,则只在数据库中保留一个insert。
例如,如果我的实体具有 (Id, parent_id and status)
,我们不希望允许多个实体具有 same parent_id and status = 1
-即使它们以这种形式来自客户端,客户端用相同的请求对我们的端点进行垃圾邮件处理。我知道其他数据库供应商也允许使用条件唯一键,即 (parent_id, status = 1)
,但mysql没有。有没有办法通过索引甚至存储过程来实现这一点?
类似问题(供参考):
条件唯一约束
sql我可以在表上有一个“条件唯一”约束吗?
https://dba.stackexchange.com/questions/7443/function-based-index-as-a-conditional-unique-key
我可以有条件地强制唯一性约束吗?
https://dba.stackexchange.com/questions/43/how-to-create-a-conditional-index-in-mysql
1条答案
按热度按时间pxy2qtax1#
你只要耍点小把戏就行了。
使用if()函数再包含一个虚拟变量列。如果status=1,这将存储父项id,否则为空,这样您就可以在此字段上创建一个唯一的键
样品
注意:create表用于mariadb,但在mysql中几乎相同