mysql事务处理 苏恒锋_Java知识点总结(JDBC-事务)

Java知识点总结(JDBC-事务)

@(Java知识点总结)[Java, JDBC]

事务

事务基本概念

一组要么同时执行成功,要么同时执行失败的 SQL 语句。是数据库操作的一个执行单元!

事务开始于:

执行 commit 或 rollback 语句。

执行一条 DDL 语句,例如 create table 语句;在这种情况下,会自动执行 commit 语句。

执行一条 DCL 语句,例如 grant 语句;在这种情况下,会自动执行 commit 语句。

断开与数据库的连接。

执行了一条 DML 语句,该语句却失败了;在这种情况下,会为这个无效的 DML 语句执行 rollback 语句。

事务的四大特点(ACID)

atomicity(原子性)

表示一个事务内的所有操作是一个整体, 要么全部成功,要么全失败

consistency(一致性)

表示一个事务内有 一个操作失败时 ,所有的更改过的数据都必须 回滚到修改前的状态 ;

isolation(隔离性)

事务查看数据时 数据所处的状态 ,要么是另一并发事务 修改它之前 的状态,要么是另一事务 修改它之后 的状态,事务不会查看中间状态的数据。

durability(持久性)

持久性事务完成之后,它对于系统的 影响是永久性的 。

事务并发处理可能引起的问题

读脏(dirty read):一个事务读取了另一个事务尚未提交的数据,

不可重复读(non-repeatable read):一个事务的操作导致另一个事务前后两次读取到不同的数据

幻读(phantom read):一个事务的操作导致另一个事务前后两次查询的结果数据量不同。

隔离级别

4个等级的事务隔离级别,在相同的数据环境下,使用相同的输入,执行相同的工作,根据不同的隔离级别,可以导致不同的结果。不同事务隔离级别能够解决的数据并发问题的能力是不同的。

SERIALIZABLE(串行化)

不会出现任何并发问题,因为它是对同一数据的访问是串行的,非并发访问的;

性能最差

REPEATABLE READ(可重复读)(MySQL)

防止脏读和不可重复读,不能处理幻读

性能比SERIALIZABLE好

READ COMMITTED(读已提交数据)(Oracle)

防止脏读,不能处理不可重复读和幻读;

性能比REPEATABLE READ好

READ UNCOMMITTED(读未提交数据)

可能出现任何事物并发问题,什么都不处理。

性能最好

MySQL隔离级别

MySQL的默认隔离级别为Repeatable read,可以通过下面语句查看:

SELECT @@`TX_ISOLATION`;

也可以通过下面语句来设置当前连接的隔离级别:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ ;//[4选1]

JDBC设置隔离级别

con.setTransactionIsolation(int level) :参数可选值如下:

Connection.TRANSACTION_READ_UNCOMMITTED;

Connection.TRANSACTION_READ_COMMITTED;

Connection.TRANSACTION_REPEATABLE_READ;

Connection.TRANSACTION_READ_SERIALIZABLE。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值