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

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

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

事务

事务基本概念

  • 一组要么同时执行成功,要么同时执行失败的 SQL 语句。是数据库操做的一个执行单元!
  • 事务开始于:并发

    • 执行 commit 或 rollback 语句。
    • 执行一条 DDL 语句,例如 create table 语句;在这种状况下,会自动执行 commit 语句。
    • 执行一条 DCL 语句,例如 grant 语句;在这种状况下,会自动执行 commit 语句。
    • 断开与数据库的链接。
    • 执行了一条 DML 语句,该语句却失败了;在这种状况下,会为这个无效的 DML 语句执行 rollback 语句。

事务的四大特色(ACID)

  • atomicity(原子性)性能

    • 表示一个事务内的全部操做是一个总体, 要么所有成功,要么全失败
  • consistency(一致性)atom

    • 表示一个事务内有 一个操做失败时 ,全部的更改过的数据都必须 回滚到修改前的状态 ;
  • isolation(隔离性)code

    • 事务查看数据时 数据所处的状态 ,要么是另外一并发事务 修改它以前 的状态,要么是另外一事务 修改它以后 的状态,事务不会查看中间状态的数据。
  • durability(持久性)事务

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

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

  1. 读脏(dirty read):一个事务读取了另外一个事务还没有提交的数据,
  2. 不可重复读(non-repeatable read):一个事务的操做致使另外一个事务先后两次读取到不一样的数据
  3. 幻读(phantom read):一个事务的操做致使另外一个事务先后两次查询的结果数据量不一样。

隔离级别

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

  • SERIALIZABLE(串行化)it

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

性能最差io

  • REPEATABLE READ(可重复读)(MySQL)table

    • 防止脏读和不可重复读,不能处理幻读
    • 性能比SERIALIZABLE好
  • READ COMMITTED(读已提交数据)(Oracle)

    • 防止脏读,不能处理不可重复读和幻读;
    • 性能比REPEATABLE READ好
  1. 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。
相关文章
相关标签/搜索