并发中对数据库数据进行写入才会出现的问题。
众所周知,数据库数据在读取的时候有三种问题,脏读,不可重复读,幻读。而在写入的时候则有丢失更新问题,丢失更新就是多方同时对一个数据进行操作,数据库仅保存最后一个提交的数据,前面提交的更新都丢失。
例如数据库有个数据为500。
A取到500,将500修改为8000。
B也取到500,将500修改为200。
A先提交,数据库中数据变为8000。B再提交,数据库中数据又变为200。A的更新就丢失了。
悲观锁和乐观锁就是解决丢失更新的两种方案。
悲观锁是直接使数据只能同时为一人所修改,即在一方修改数据时其他人无法修改数据。此方法正如其名字所言,较为悲观,效率低,一般不推荐使用。
乐观锁则是加入字段version,取出数据时取出version,提交修改时比较取出的version和当前数据库中的version是否一致,也就是有没有其他人已经对数据进行修改。如果不一致,也就是数据已经被其他人修改过,则无法进行提交;如果一致,则在提交修改的同时将version加1。