MySQL数据库mysql

MySQL学习笔记(二):事务管理

2017-05-29  本文已影响133人  maxwellyue

一、概念


二、MySQL事务

2.1 事务类型

该部分引用自说说MySQL中的事务

BEGIN WORK
    Operation 1
    Operation 2
    Operation 3
    ...
    Operation N
COMMIT WORK

或者是这种:

 BEGIN WORK
     Operation 1
     Operation 2
     Operation 3
     ...
     Operation N
     (Error Occured)
 ROLLBACK WORK

扁平事务的主要缺点是不能提交或回滚事务的某一部分,或者分几个独立的步骤去提交。

BEGIN WORK
     SubTransaction1:
             BEGIN WORK
                 SubOperationX
             COMMIT WORK
     SubTransaction2:
             BEGIN WORK
                 SubOperationY
             COMMIT WORK
     ...
     SubTransactionN:
             BEGIN WORK
                 SubOperationN
             COMMIT WORK
 COMMIT WORK

2.2 使用事务

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
1 row in set

因此要显示地开启一个事务须使用命令BEGINSTART TRANSACTION,或者执行命令SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。

mysql> SET AUTOCOMMIT=0;
Query OK, 0 rows affected
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+
1 row in set

另外,对于常见的两种存储引擎,InnoDB支持事务,MyISAM不支持。

2.3 事务隔离级别

先看一个表格总结:

隔离级别 脏读(Dirty Read) 不可重复读(NonRepeatable Read) 幻读(Phantom Read)
未提交读:Read uncommitted yes yes yes
已提交读:Read committed no yes yes
可重复读:Repeatable read no no yes
可串行化:Serializable no no no

注:yes只是指有可能,并不一定会发生;no是指绝对不会发生。

再看具体释义:

一些概念补充


更新

20180116--细化幻读和不可重复读的概念区分

上一篇 下一篇

猜你喜欢

热点阅读