Mysql 确保行子集中的值相同
我有一个表,用于跟踪分配给bucket中插槽的用户:Mysql 确保行子集中的值相同,mysql,Mysql,我有一个表,用于跟踪分配给bucket中插槽的用户: BUCKET_ID SLOT_ID USERNAME 0 0 bob 0 1 bob 0 2 bob 1 0 suzy 1 1 suzy 2 0 chris 3 0 bob 一个用户可以占用多个插槽。事实上,一个用户
BUCKET_ID SLOT_ID USERNAME
0 0 bob
0 1 bob
0 2 bob
1 0 suzy
1 1 suzy
2 0 chris
3 0 bob
一个用户可以占用多个插槽。事实上,一个用户可以占用多个存储桶。但我需要强制一个bucket只能有一个用户。也就是说,Bob和Suzy不能占用同一个存储桶中的插槽0和1
有没有办法在数据库中强制执行此逻辑?也就是说,使有问题的insert事务失败
我知道的事务失败的唯一方法是它是否违反了唯一索引。所以我正在研究一个触发器,它更新一些辅助表,一个只存在以包含唯一索引的表
其他建议?能否在插入前执行select查询以验证插入,然后有条件地插入记录? 像
从bucket_id=0和用户名'suzy'的表中选择用户名
如果上面的查询没有返回任何记录,则insert有效,否则其他用户已经拥有一个bucket,insert无效Yes,这将依赖于我的应用程序来强制执行唯一性。但我希望冲突的存在是“不可能的”。这样,随着应用程序扩展以支持更高的并发性,我的数据将受到保护。
select username from table where bucket_id = 0 and username <> 'suzy'