Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 确保行子集中的值相同_Mysql - Fatal编程技术网

Mysql 确保行子集中的值相同

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中插槽的用户:

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'