事物的特性有:原子性、一致性、隔离性、持久性
事物的隔离级别有四种:
甲向乙转账1000元为例说明:
1.read uncommitted(读取尚未提交的数据):乙会读到甲未提交的数据,即乙读到余额加了1000元,甲一旦回滚钱就会回甲那里,乙的余额又会变回去,这即是脏读;
2.read committed(读取提交后的数据):乙只能读到甲提交后的数据,甲不提交乙的余额并不会发生变化。在Oracle数据库中默认事物级别为read committed,可以解决脏读问题;
3.repeatable read(重复读取):MySQL默认事物级别,可以解决脏读和不可重复读问题;
4.serializable(串行化,序列化):最高的事务隔离级别,可以解决脏读,不可重复读及幻读问题,但相当于锁表,性能及效率大大降低。
JDBC中的事物操作:
1.默认是自动事务:在执行sql语句:executeUpdate() —- 每执行一次executeUpdate方法就代表着事务自动提交
2.通过jdbc的API手动事务:
开启事务:conn.setAutoComnmit(false);
提交事务:conn.commit();
回滚事务:conn.rollback();
注意:控制事务的connnection必须是同一个,即执行sql的connection与开启事务的connnection必须是同一个才能对事务进行控制,所以我们可以在获得connection连接的工具类中通过ThreadLocal绑定connection连接资源,这样不管在MVC任意一层都可以获取到同一个connection资源(原理为不管调用多少个方法,跳转多少个类,始终只有一个线程在为这个操作服务)
事物学习总结
最新推荐文章于 2021-12-01 10:45:28 发布