MySQL基础(4):事务控制

查看存储引擎:show engines;

InnoDB支持事务,MyISAMMEMORY不支持事务

1、事务的特性:(ACID

  原子性:一个事务不可再分割,要么都执行要么都不执行。

  一致性:一个事务执行会使数据从一个一致状态切换到另一个一致状态

  隔离性:一个事务的执行不受其他事务的干扰(需要通过设置隔离级别)

  持久性:一个事务一但提交,则会永远改变数据库数据

2、事务的创建

  没有结束事务前,相当于只是保留在内存。

步骤1:开启事务
    set autocommit=0;
    【start transaction;】
步骤2:事务中的语句;
步骤3:结束事务
    commit;
    rollback;

3、常见的并发问题

  脏读:一事务T1读取了被T2更新但还未提交的字段后,若T2回滚,T1读取的内容就是临时且无效的。

       设置read commited后,即使T2更新了但未提交,TI读的还是更新前的数据。

  不可重复度:一事务T1读取一字段后,T2更新了该字段后,T1再读取时两次结果不一样。

       设置repeatable read后,即使在T1执行期间T2修改了字段,T1T2修改前后读取的两次结果一样,读取的都是T2修改前的结果,T1提交后再查询才会得到最新的数据。

  幻读:一个事务T1操作表时,另一个事务T2在这时插入或删除数据,会导致T1修改的时候多了或少了几条数据。

       设置serializable后,T1在表里只有两条数据的时候准备进行更新,这时T2插入了1条数据并提交事务,这时T1影响的仍是两条数据,T2会以阻塞的方式,等T1执行完才能插入。

4、隔离级别

  隔离级别:隔离级别越高,数据一致性越好,但并发性越弱

   

  Mysql默认级别是REPEATABLE READ

  Oracle只支持READ COMMITEDSERIALIZABLE,默认是READ COMMITTED

查询当前隔离级别:
    select @@tx_isolation;
设置当前mysql连接/ 全局的隔离级别:
    set session/global transaction isolation level READ COMMITTED;

5savepoint结合rollback使用

   

猜你喜欢

转载自www.cnblogs.com/seekingheart/p/9114702.html