确保跨行子集的相同值

时间:2014-03-09 03:45:38

标签: mysql

我有一个表来跟踪分配给存储区中插槽的用户:

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

用户可以占用多个插槽。实际上,用户可以占用多个桶。但我需要强制一个桶只能有一个用户。也就是说,Bob和Suzy不能在同一个存储桶中占用插槽0和1。

有没有办法在数据库中强制执行此逻辑?也就是说,使违规的插入事务失败。

我知道事务失败的唯一方法是它是否违反了唯一索引。所以我正在研究一个更新某些辅助表的触发器,一个仅存在于包含唯一索引的辅助表。

其他建议?

1 个答案:

答案 0 :(得分:0)

您可以在插入之前执行select查询以验证插入然后有条件地插入记录吗? 喜欢

  select username from table where bucket_id = 0 and username <> 'suzy'

如果上面的查询没有返回记录,那么insert是有效的,否则另一个用户已经拥有一个存储桶并且插入无效