咋确保数据库的某条唯一数据
分成2个表
1、学生表
2、班长表(班级ID + 学生ID,建立唯一约束)
■网友
可以在权限里做,班长本身也是一个角色。针对性设计的话可以用唯一索引。
■网友
方案1,不错。我也经常这么用。但实际上这是MySQL的一个特性。就是唯一索引列中NULL值不计算唯一约束。如果你用Oracle,就会有一个所谓条件唯一索引的东东,就是如果满足一个条件才做唯一约束。大概语法是这样的。CREATE UNIQUE INDEX uniq_master ON student((CASE WHEN is_master = \u0026#39;1\u0026#39; THEN is_master ELSE null END));
方案2,也可以用。但是你要保证你的隔离级别会有gap锁。否则会出现并发插入/更改的问题,得到多于1个master。最简单的就用Serilaziable隔离级别。为了避免性能损耗,你可以设置只有这一个事务用Serializable。
如果坚决不用Serializable,还有一个招数,叫做“物化冲突”,把这件事情做一张表表示一个锁。create table master_assign_lock ( lock char(1) default \u0026#39;1\u0026#39;);在做设定班长时,先对这个锁 select ... for update然后再进行设置班长的操作。但是这样做会很丑,把业务代码和约束混到了一起。所以建议作为最后的考虑。
顺带提一句,如果你用的是Postgres,那的RC和Serializable隔离级别的实现不是基于锁,而是Serializable Snapshot Isolation,这个机制会帮你做“事务提交时,提交依赖的事务是不是被别的事务改过的“的check。如果是,事务会提交失败。
具体可以看我的 文章,中“SSI和基于SSI实现的Serializable“的描述
数据库事务、隔离级别和锁 【咋确保数据库的某条唯一数据】
推荐阅读
- 河北保定持续治理白洋淀上游污染确保入淀水质达标
- 考研数据库方向
- 哪个数据库,可以直接做数据透视图(navicat类的也可以)
- 考研|考研倒计时一个月 教育部部署工作确保考试平稳有序
- 党报党刊|徐州确保完成党报党刊发行任务
- |宿迁确保12月5日前完成党报党刊发行任务
- 哪里能获取美股月度成交金额的数据,找了好几个数据库都只有成交量
- |灌云县大伊山旅游经济区多措并举确保景区安全无事故
- 启东吕四起步港陆上沉桩全部完成 确保明年底投运
- 为啥大多数人反对“女性穿得少被人侵犯都是活该”,却强调“数据库必须做防注入和防XSS攻击”
