乐观锁和悲观锁
    悲观锁实现
    在对任意记录进行修改前,先尝试为该记录加上排他锁(exclusive locking)。
    如果加锁失败,说明该记录正在被修改,那么当前查询可能要等待或者抛出异常。
    如果成功加锁,那么就可以对记录做修改,事务完成后就会解锁了。
    其间如果有其他对该记录做修改或加排他锁的操作,都会等待我们解锁或直接抛出异常。
    悲观锁是一种默认产生冲突的处理概念,上述四个步骤表达了悲观锁的含义。
    start transaction;
    select A from B where C for update;
    update B set D;
    commit;
    第一步开始事务,第二步select末尾for update表示在此次事务提交完成之前select查询到的语句被锁定,在事务结束之前不会被改变。
    乐观锁实现
    在大项目中,数据库的每一张表至少有10多个字段。即使是很简单的一张表也会有很多字段,这是因为每一张表都有相同的一些记录性字段,比如:最后修改时间、最后修改人、版本号…我们可以利用其中的版本号来实现乐观锁。
    select A,version from B where C
    …(其他操作)
    update B set D,version=version+1
    where C and version = E;(E是已知最近版本号)
    单单是数据库不便于操作,可以结合代码记录版本号,事务完成后进行验证。