怎样保证一组数据只能对其中一个设为true?

table A:
group    name    default
a    Jack1    1
a    Jack2    0
a    Jack3    0
b    Jack1    0
b    Jack2    0
b    Jack3    1
c    Jack1    1

表中有abc三个组,每个组只有一个数据(default)能被设置为1,并且保证至少有一个数据被设置为1。
有什么好的方案限制?

阅读 3.2k
2 个回答

触发器可以做到 但是比较麻烦

最好还是在逻辑层面用事务实现

1.
SELECT SUM(default) FROM TableA WHERE group='A'
这语句的值赋给a变量,
获取你要插入/删除的记录的default值,与a做相应运算,结果大于1则继续操作,不然return false;

2.
利用事务处理,在数据库SETAUTOCOMMIT=0来关闭自动提交
再做我们相关操作
操作后查一查是否满足你自己设定的条件
要是满足就COMMIT,不满足就ROLLBACK,然后CLOSE这次事务处理,再把自动提交打开以保证其他程序运行正常
AUTOCOMMIT=1

只是大概我的想法,尝试下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进