Mysql 中的事务

来源:互联网 发布:手机淘宝排行榜模版 编辑:程序博客网 时间:2024/06/06 04:02
  Mysql 提供两种事务性的存储引擎:InnoDB和NDB Cluster 。另外还有一些第三方的存储引擎也只事务,比较知名的包括XtraDB和PBXT。后面讲详细讨论他们各自的一些特点。

自动提交

Mysql 采用的是默认自动提交(autocommit)模式,也就是说,如果不是显示的开始一个事务,则每个查询都当被一个事务执行提交作业。在当前的连接中,可以通过设置atuocommit 变量来启动或者禁用自动提交模式.
mysql> show variables like 'autocommit';+---------------+-------+| Variable_name | Value |+---------------+-------+| autocommit    | ON    |+---------------+-------+1 row in set (0.00 sec)mysql> set autocommit = 1;

1或者on 表示启动,0或者off 表示禁用。当autocommit=0 时,所有的查询都是在一个事务中,直到显示的commit提交或者rellback回滚,该事务结束,同时又开始了另外一个新的事务。修改autocommit 对非事务类型的表,如MyISAM或者内存表,不会有影响。对这些表来说,没有commit或者rollback的概念,也可以说是一种一直处于autocommit 启动的模式。
另外还有一些命令在执行之前会强制执行commit 提交当前的事务,典型的例子,在数据定于语言(DDL)中,如果会导致大量的数据改变操作,如alert Table ,就是如此。另外还有lock tables 等其他语句也会导致同样的结果,如果有需要请检查对应的版本的官方文档来确认所有可能导致自动提交的语句列表。
Mysql 可以通过执行set transaction inolation level 命令来设置隔离级别。最新的隔离级别也会在也在下一个事务中开始生效。可以在配置文件中设置整个数据库的的隔离级别,也可以改变当前回话的隔离级别:

mysql> set session transaction isolation level read committed;Query OK, 0 rows affected (0.00 sec)

Mysql 能够识别所有的四个ansi 隔离级别,InnoDb 引擎也能支持所有的各级级别。
改变事务级别 具体如下

SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

可以使用以下语句查询当前是事务级别

SELECT @@global.tx_isolation; SELECT @@session.tx_isolation; SELECT @@tx_isolation;
0 0
原创粉丝点击