innodb 中文参考手册 --- 犬犬(心帆)翻译 8 innodb 事务模式与锁定 在 innodb 事务处理模式中, the goal has been to combine the best properties of a multiversioning database to traditional two-phase locking. innodb 进行行级的锁定,并以与 oracle 非锁定读取(non-locking)类似的方式读取数据。 innodb 中的锁定表的存储是如此(space-efficiently)而不再需要扩大锁定: 典型特色是一些用户可能锁定数据库中的任意行或任意行的子集,而不会引起 innodb 内存运行溢出。
在 innodb 中,所有的用户操作均是以事务方式处理的。如果 mysql 使用了自动提交(autocommit)方式,每个 sql 语句将以一个单独的事务来处理。mysql 通常是以自动提交方式建立一个服务连接的。
select * from t; empty set; commit; select * from t; --------------------- | 1 | 2 | --------------------- 因而,只有当用户 b 提交了他的插入,并且用户 a 也提交了他的事务从而使时间点越过 b 提交时的时间点之后,用户 a 才能看到用户 b 所插入的新行。 如果你希望查看数据库“最新的(freshest)”状态,你必须使用 read committed 事务隔离级,或者你可以使用读锁: select * from t lock in share mode;