多个客户端对登记单中的最后一条数据的登记单编号加1,然后插入数据,请问,如何避免读取到脏数据呢?也就是说刚刚读取到最后一条,就有其他人插入了一条,如何杜绝这个问题?我使用的是EF
使用transaction
我写过一篇文章,是专门讲这个问题的:/post/112
话说可不可以这样做,也不管它并发了,只要插入的时候发现登记单编号重复,重新查询便是,这样可以吗?总的客户端不多
这样是可以的。
事务也可以。
流水编号都是采用不可重复独立发放的,没有人是搞什么根据最后一条记录
就算你坚持要用传统模式做,也行。资源下载单独一个表,就1条记录.分配流水号操作直接锁表,记录只加不减
所有人拿到的都是递增的,不会有重复。即使你2小时以后提交数据,流水号也没问题。
插入判断重复并不好,编号本来就是后台生成的,并非用户造成的错误,这报错前台用户看的一脸懵比
就像#5说的
建新表来记录流水号,获取流水号时锁表
进攻式编程,你在登记单编号建个唯一索引,执行插入重复的编号语句就会报不能在具有唯一索引的对象中插入重复键的行
如果觉得《数据库如何避免读取脏数据?》对你有帮助,请点赞、收藏,并留下你的观点哦!