乐观锁
顾名思义,乐观锁的想法很乐观,对数据库进行操作前一般认为此次操作不会产生冲突,因此操作时并不进行锁操作,等到操作结束时才判断是否冲突。
通常的实现方式是:对表的数据进行操作时,同时将数据表的版本字段取出,等到操作完毕进行提交时,将数据版本号与表内的数据版本号进行比较,如果相等,说明这段时间内没有别的事务对数据表进行操作,则将版本号加一,并予以更新。否则认为是过期数据,进行回滚。
乐观锁不是数据库本身自带的锁,需要程序员自己实现。
悲观锁
顾名思义,当一个事务对数据表进行操作时,想法很悲观,因此每次进行数据库操作前,都将数据表进行加锁,与java的synchronized相似,当其他事务进行数据库操作时,必须等到获取锁后,才能进行操作,因此悲观锁的效率很低。
悲观锁是由数据库自身实现的,我们需要用的时候只需调用即可。