作多用户操做的系统,必定,必定,必定要考虑“并发”,这种并发,除了系统级别的并发,还有应用级别的并发。若是两我的同时去操做相同的数据,那么要有“第二我的就操做不了”的机制!sql
请你们考虑一套未来再遇到这种问题的解决方案.并发
这里我针对 若是两我的同时去操做相同的数据,那么要有“第二我的就操做不了”的机制!提出一种解决方法:
spa
有一个比较好的办法能够解决这个问题,那就是经过一个单独的能够顺序递增的version字段。改成如下方式便可:code
//查询出商品信息,version = 1 select version from items where id=1 //修改商品库存为2 update items set quantity=2,version = version+1 where id=1 and version = 1;
每次在执行数据的修改操做时,都会带上一个版本号,一旦版本号和数据的版本号一致就能够执行修改操做并对版本号执行+1操做,不然就执行失败。由于每次操做的版本号都会随之增长,因此同时修改的话只有一个修改生效。blog
除了version之外,还可使用时间戳,由于时间戳自然具备顺序递增性:it
例子:io
UPDATE_AT是时间戳字段,请看以下两条相同的update语句:class
update "AREACODE" set "UPDATE_AT"=now() where "GCODE"='510303' AND "UPDATE_AT"='2019-06-19 17:02:42.755857'; update "AREACODE" set "UPDATE_AT"=now() where "GCODE"='510303' AND "UPDATE_AT"='2019-06-19 17:02:42.755857';
执行结果以下:date
结果第一条sql语句执行了,第二条没有执行成功,实现了若是 两我的同时去操做相同的数据,那么要有“第二我的就操做不了”select