事务以及JDBC操作事务的学习

来源:互联网 发布:淘宝买家怎么快速升钻 编辑:程序博客网 时间:2024/06/10 13:53

一、事务简介

事务就是完成一组操作需要的n个组成单元,要么都做,要么都不做。例如,A给B转账,这就是一个事物,A的钱减少和B中的钱增多是一个事务,要么都不变,要么都改变,这样才能保证功能的正确完成。

mysql的事务

默认的事务:一条sql语句就是一个事务,默认会开启并提交事务。
手动事务
手动开启事务之后的sql操作都不会执行,会等待(2)或(3)相应的指令,等待到了(2)则会将中间的sql都执行;等待到了(3)则会将中间的操作都认为是无效操作。
(1)开启一个事务:start transaction
(2)事务提交:commit 。从开启事务到提交事务,每条sql语句都真正地执行并更新了数据库了。
(3)回滚:rollback。从开启事务到事务回滚,中间的每条sql语句都认为无效的操作并不会更新数据库。

二、JDBC事务操作

默认是自动事务

执行sql语句:excuteUpdate()每执行一次相当于excuteUpdate方法代表事务自动提交。
通过JDBC的API手动开启事务:
(1)开启事务:conn.setAutoCommit(false)
(2)事务提交:conn.Commit();
(3)回滚:conn.rollback();
要求必须是同一个Connection连接来控制一个事务。

三、DBUtils事务操作

有参构造:QueryRunner runner = new QueryRunner(DataSource dataSource);
有参构造将数据源(连接池)作为参数传入QueryRunner,QueryRunner会从连 接池中获得一个数据库连接资源操作数据库,所以直接使用无Connection参数 的update方法即可操作数据库
无参构造:QueryRunner runner = new QueryRunner();
无参的构造没有将数据源(连接池)作为参数传入QueryRunner,那么我们在使 用QueryRunner对象操作数据库时要使用有Connection参数的方法。

四、事务的特性和隔离级别

1、事务的特性(ACID)

(1)原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
(2)一致性(Consistency)一个事务中,事务前后数据的完整性必须保持一致。
(3)隔离性(Isolation)多个事务,事务的隔离性是指多个用户并发访问数据库时, 一个用户的 事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。
(4)持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

2、并发访问问题(隔离性引发)

(1)脏读:A事务读到了B事务还没有提交的数据。
(2)不可重复读:一个事务中两次读取的数据的内容不一致;要求的是一个事务中多次读取时数据是一致的(update)
(3)幻读/虚读:一个事务中 两次读取的数据的数量不一致;要求在一个事务多次读取的数据的数量是一致的(insert delete)

3、事务的隔离级别

(1)read uncommitted : 读取尚未提交的数据 :哪个问题都不能解决
(2)read committed:读取已经提交的数据 :可以解决脏读 —- oracle默认的
(3)repeatable read:重读读取:可以解决脏读 和 不可重复读 —mysql默认的
(4)serializable:串行化:可以解决 脏读 不可重复读 和 虚读—相当于锁表

查看数据库默认的隔离级别:select @@tx_isolation;
设置隔离级别:set session transaction isolation level

原创粉丝点击