事务是访问数据库的一个操作序列,数据库通过事务集来完成对数据库的存取;
事务必须服从:原子性,一致性,隔离性和持久性;
1、原子性:原子性就是不可分割性,事务要么全部被执行,要么全部不被执行;全部的子事务提交成功,则所有对数据库的操作被提交数据库的状态发生改变;数据库只要有一条子事务没有被执行,其他子事务对数据库的操作也会被回滚,数据库回到执行事务之前的状态;
2、一致性:事务的执行是的数据库从一种状态变化为另外一种状态;
3、隔离性:在事务提交之前,不允许把该事务对数据库的操作提供给其他事务;
4、持久性:事务一旦正确提交,就会对数据库进行永久性的修改;
悲观锁:悲观锁主要是通过数据库的锁机制来实现的,它在对数据进行操作时会将数据进行加锁,来实现对数据的独占性。
典型的sql语句是:select * from emp where name='scott' for update;
缺点是:开销太大;
实现方式:session.lock等
乐观锁:乐观锁是在数据库加一列version,读取数据时,把version一块读取,提交时必须保证提交的version大于读取时的version否则提交失败;提高了高并发下的数据执行效率;
缺点:具有一定的局限性,只能在自己的系统中来实现,外部系统的用户不受我们控制,容易出现“脏读”;
实现;Hibernate内嵌了乐观锁,通过optimistic-lock=“version”即可;