乐观锁和悲观锁

来源:互联网 发布:java程序员需要学什么 编辑:程序博客网 时间:2024/04/30 09:18

悲观锁:固执地认为我操作这条数据的同时这条数据一定会被别人修改,所以我操作这条数据时先把数据锁定起来,不让别人修改。使用事务进行,select……for update锁定这条数据。
:锁定时如果指定了主键,会执行Row lock (只锁住被选取的数据) ,否则MySQL 将会执行Table Lock (将整个数据表单给锁住)。
:要使用悲观锁,我们必须关闭mysql数据库的自动提交属性,因为MySQL默认使用autocommit模式,也就是说,当你执行一个更新操作后,MySQL会立刻将结果进行提交。
:需要注意的是,在事务中,只有SELECT … FOR UPDATE 或LOCK IN SHARE MODE 同一笔数据时会等待其它事务结束后才执行,一般SELECT … 则不受此影响。

乐观锁:并不认为我操作这条数据时别人也会操作,所以我们先给这条数据加一个版本号(可以为一个updatetime字段),查询当前数据的updatetime,去更新当前的updatetime所在的这一条数据,如果没有更新成功,则重新执行。