MySQL中的事务处理

3

MySQL用什么来进行事务处理?是MVCC(多版本并发控制)还是行级锁定
如果两者都可以,我们如何从一个切换到另一个。

1个回答

5
这不取决于MySQL本身,而是取决于使用的引擎,例如InnoDB或MyIsam。
在InnoDB事务模型中,目标是将多版本数据库的最佳属性与传统的两阶段锁定相结合。InnoDB默认以非锁定一致性读取方式运行查询,并在行级别上进行锁定,这类似于Oracle。InnoDB中的锁表存储空间非常高效,因此不需要锁升级:通常允许多个用户锁定InnoDB表中的每一行,或任意随机行的子集,而不会导致InnoDB内存耗尽。

(来源: http://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html)


MySQL对MyISAM、MEMORY和MERGE表使用表级锁定,每次只允许一个会话更新这些表,使它们更适合只读、读多或单用户应用程序。

(来源: http://dev.mysql.com/doc/refman/5.1/en/internal-locking.html)


根据两阶段锁定,外部 SQL 语句不能访问交易中间语句修改的数据,直到事务提交,但是在某些事务处于中间状态时,外部 SQL 语句并未被阻塞。这是如何实现的?两阶段锁定是否真的存在?我正在使用的 DB 引擎是 INNODB。 - Rohit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接