一、悲观锁:认为每次对数据库的操做(查询、修改)都是不安全的,所以每次操做都会把这条数据锁掉,直到本次操做完毕释放该锁数据库
二、乐观锁:查询数据的时候老是认为是安全的,不会锁数据;等到更新数据的时候会判断这个数据是否被人修改过,若是有人修改过了则本次修改失败安全
一、悲观锁:悲观锁的内部实现是采用的数据库内部的锁机制,一个典型的依赖数据库的悲观锁调用:并发
SELECT * FROM TABLE WHERE ID='1' FOR UPDATE;高并发
这条语句锁定了TABLE表总id='1'的这条数据,本次事务提交以前(事务提交后会释放事物终的锁)外界没法修改本条记录,同时也保证了本条数据的准确性;spa
悲观锁缺陷:若是在高并发的状况下,每条数据都排队按照以上过程去加锁、运行、解锁,那么可想而知执行时间,等待时间是很是长的,用户体验是很是差的事务
二、乐观锁:乐观锁的实现方式有两种:1是添加version字段每次修过叠加;2是使用updatetime每次更新数据后系统自动更新io
UPDATE TABLE SET NAME='DD' WHERE UPDATETIME='查询出的时间'AND ID='1'用户体验
UPDATETIME也可换成version 在where条件加上这两天自动更新字段,若是不符合说明有改动date
乐观锁缺陷:若是修过特别频繁冲突特别多的状况下会致使不少操做都失败im