分享

mysql中的事务

 非常尛貝 2012-04-10
1:
mysql的事务提交模式:默认是autocommit
show variables like 'autocommit'
 
 
2:设置默认的提交模式:
set autocommit = 0

3:
 设置当前session的隔离级别
set session transaction isolation level read committed;

4: 其他转自 

1.查看当前会话隔离级别

select @@tx_isolation;

2.查看系统当前隔离级别 

select @@global.tx_isolation;

3.设置当前会话隔离级别

set session transaction isolatin level repeatable read;

4.设置系统当前隔离级别

set global transaction isolation level repeatable read;

5.命令行,开始事务时

set autocommit=off 或者 start transaction

关于隔离级别的理解

1.read uncommitted

可以看到未提交的数据(脏读),举个例子:别人说的话你都相信了,但是可能他只是说说,并不实际做。

2.read committed

读取提交的数据。但是,可能多次读取的数据结果不一致(不可重复读,幻读)。用读写的观点就是:读取的行数据,可以写。

3.repeatable read(MySQL默认隔离级别)

可以重复读取,但有幻读。读写观点:读取的数据行不可写,但是可以往表中新增数据。在MySQL中,其他事务新增的数据,看不到,不会产生幻读。采用多版本并发控制(MVCC)机制解决幻读问题。

4.serializable

可读,不可写。像java中的锁,写数据必须等待另一个事务结束

5:

我的理解

四种隔离级别:

read uncommitted(读取未提交内容)

在这种级别,所有事务都可以'看到'未提交事务的执行结果。她可能会产生很多的问题。不太建议

read committed

大多数的数据库默认是这种隔离级别,而mysql 是repeatable read级别。它满足一个简单的定义:一个事务在开始时, 只能看见 已提交事务的结果, 即一个事务从开始到提交之前,所有的数据都是不可见的。

出现的问题:

一个用户运行同一条语句两次,结果可能不同

repeatable read (可重读)

mysql 默认这种隔离级别。她可以确保同一个事务的多个实例可以并发的读取数据, 会'看到同样的数据行’。但是,她可能产生另一个问题- 幻读(简单的说, 当一个用户读取某一个范围的数据行,另一个事务在这个范围插入,当这个用户在次读取这个范围的数据行时, 就会产生所谓的'幻影’)

备注: InnoDB 和 Falcom 存储引擎通过MCC机制解决了幻影问题。(有时间在看

serializable (可串行化)

最高级别的隔离级, 她通过强制事务排序,使他们不产生冲突,从而解决幻读取问题。

但是会产生超时(Timecout)和 锁竞争(Lock contention)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多