ITPub博客

mysql学习12:第七章:事务

翻译 MySQL 作者:studywell 时间:2018-11-07 18:40:31 0 删除 编辑

 

1.   事务

1.1.   事务的特性

InnoDB存储引擎支持事务,默认自提交模式,如要开启事务,必须以begin命令开始,以commit或者rollback结束。

事务特性

l   原子性(Atomiity):要么都做,要么都不做。

l   一致性(Consistency):操作前后满足业务规则约束。

l   隔离性(Isolation):多个并发事务互不影响。

l   持久性(Durabili):事务结束,对数据的修改是持久的。

1.2.   事务语句

事务开启语句由begin或start transaction(read write|read only)命令开始,结束用commit或rollback显示结束。

隐式提交:DDL操作或再次输入begin和start transaction命令。

隐式回滚:退出会话、连接超时、关机等。

关闭自提交特性(set autocommit=0)

开启自提交特性(set autocommit=1)

关闭自动提交好处:不用一个事务一次提交,多个事务一起体骄傲,提高处理能力。

关闭自提交坏处:如一事务长期不提交,导致行锁等待,影响数据库TPS值。

不建议关闭自提交模式。

1.3.   truncate和delete的区别

truncate 是DDL,事务中不能回滚,会清空表的自增属性,回到原始开始值。

delete是DML

共同点:清空表内数据,

1.4.   事务的隔离级别

SQL标准的4钟隔离级别

n   读未提交(read uncommitted),RU,一个事务可以读取到其他事务未提交的数据变化,叫脏读,生产环境不建议使用。

n   读已提交(read committed),RC,一个事务可以读其他事务已提交的数据变化,叫不可重复读,是Oracle默认事务隔离级别。

n   可重复读(repetable read),RR,一个事务中,直到事务结束前,都可以反复读取到事务刚开始时看到的数据,并一直不发生变化,避免了脏读、不可重复读、幻读现象的发生。mysql默认事务隔离级别。

n   串行(serializable),在每个读的数据行上都加表级共享锁,在每次写数据时都要加表级排他锁。造成InnoDB的并发能力下降、大量超时和锁竞争的发生,不建议用到生产环境。

 

查看当前库隔离级别

[mysql]>show variables like '%tx_isolation%';

 

+---------------+-----------------+

| Variable_name | Value           |

+---------------+-----------------+

| tx_isolation  | REPEATABLE-READ |

+---------------+-----------------+

 

修改全局或当前会话的事务隔离级别

set global|session transaction isolation level

1.5.   脏读、不可重复读、幻读、可重复读

1.5.1.   脏读

RU,一个事务读取别的事务未提交的数据。

1.5.2.   不可重复读与幻读

不可重复读:一个事务读取到其他事务针对旧数据的修改记录,常见(update,delte)。

幻读:一个事务读取到其他事务新增数据,常见(insert),允许出现在已提交事务的隔离级别中。

1.5.3.   可重复读

可重复读是mysql默认事务隔离级别,消除脏读、不可重复读、幻读等现象,很好保证事务的一致性。

如在本事务想读取别的新增数据,可如下:

查询:select * from t for update;

本事务提交一次:commit;

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29519108/viewspace-2219140/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-03-04

  • 博文量
    278
  • 访问量
    395432