Mysql中的事务:

     a.mysql引擎是支持事务的

     b.mysql默认自动提交事务。每条语句都处在单独的事务中。

     c.手动控制事务

              开启事务:start  transaction|begin

              提交事务:commit

              回滚事务:rollback 

JDBC如何控制事务的呢? 看下图

 

事务的特性有哪些呢?

     1、原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

     2、一致性:事务必须使数据库从一个一致性状态变换到另一个一致性状态。例如转账前和转账后的总金额不变。

     3、隔离性:事务的隔离性指的就是多个用户并发访问数据库的时候,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事物之间要相互隔离。

     4、持久性:指一个事务一旦被提交了,他对数据库中的改变就是永久性的,接下来即使数据发生故障也不应该对其有任何影响。

    

事务的隔离级别:   4

    脏读:指一个事务读取了另一个事务未提交的数据。

    不可重复读:在一个事务内读取表中的谋一行数据,多次读取结果不同。一个事务读取到了另一个事务提交后的数据。 update

    虚读  (幻读):在一个事务内读取到了别的事务插入的数据,导入前后读取不一致  insert

    数据库设置事务的隔离级别防止以上情况的发生:

              1、READ  UNCOMMITTED:   脏读   不可重复读   虚读 都有可能发生

              2、READ  COMMITTED     :   避免脏读。  不可重复读,虚读可能发生。(oracle默认)

              4、REPEATABLE   READ:避免脏读、不可重复读。虚读可能发生。(mysql默认)

              8、SERIALIZABLE:避免脏读、不可重复读、虚读

  级别越高,性能越低,数据越安全。

   

       mysql:查看当前事务的隔离级别:  SELECT  @@TX_ISOLATION;

                    更改当前事务的隔离级别:SET TRANSACTION  ISOLATION LEVEL 四个级别之一。

                    设置隔离级别必须在提交事务之前。

 

JDBC控制事务的隔离级别:

    Connection接口

   

     设置隔离级别,必须在事务开启之前。

     Connection.setTransactionIsolation(int levlel);

           

      

 

 

    

posted on 2018-01-14 13:22  Leroy_罗先生  阅读(151)  评论(0编辑  收藏  举报