MySQL基础:事务控制

Posted seekingheart

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL基础:事务控制相关的知识,希望对你有一定的参考价值。

查看存储引擎: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使用

   技术分享图片

 

以上是关于MySQL基础:事务控制的主要内容,如果未能解决你的问题,请参考以下文章

8-1 Mysql基础常考题

MySQL基础:事务控制

基础-事务

mysql基础教程-----事务视图存储过程和函数流程控制

《高性能MySQL》读书笔记之 MySQL锁事务多版本并发控制的基础知识

MySQL 进阶 InnoDB引擎 -- 逻辑存储结构架构(内存结构磁盘结构后台线程)事务原理(事务基础redo logundo logMVCC多版本并发控制:版本链 ReadView)