MySQL基础:事务控制
Posted seekingheart
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL基础:事务控制相关的知识,希望对你有一定的参考价值。
查看存储引擎:show engines;
InnoDB支持事务,MyISAM、MEMORY不支持事务
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修改了字段,T1在T2修改前后读取的两次结果一样,读取的都是T2修改前的结果,T1提交后再查询才会得到最新的数据。
幻读:一个事务T1操作表时,另一个事务T2在这时插入或删除数据,会导致T1修改的时候多了或少了几条数据。
设置serializable后,T1在表里只有两条数据的时候准备进行更新,这时T2插入了1条数据并提交事务,这时T1影响的仍是两条数据,T2会以阻塞的方式,等T1执行完才能插入。
4、隔离级别
隔离级别:隔离级别越高,数据一致性越好,但并发性越弱
mysql默认级别是REPEATABLE READ
Oracle只支持READ COMMITED和SERIALIZABLE,默认是READ COMMITTED
查询当前隔离级别: select @@tx_isolation; 设置当前mysql连接/ 全局的隔离级别: set session/global transaction isolation level READ COMMITTED;
5、savepoint结合rollback使用
以上是关于MySQL基础:事务控制的主要内容,如果未能解决你的问题,请参考以下文章
《高性能MySQL》读书笔记之 MySQL锁事务多版本并发控制的基础知识
MySQL 进阶 InnoDB引擎 -- 逻辑存储结构架构(内存结构磁盘结构后台线程)事务原理(事务基础redo logundo logMVCC多版本并发控制:版本链 ReadView)