在MySQL中插入期间,表级锁定会锁定什么?

时间:2009-01-18 03:55:01

标签: mysql myisam

我多次读过MySQL会在插入过程中对MyISAM表执行表级锁定。如果该锁仅用于序列化插入/删除命令,那么对我来说没关系。插件在我的网站上很少见。

但是,在insert命令完成之前,锁定是否会阻止所有Select查询?

2 个答案:

答案 0 :(得分:3)

写锁定将阻止使用您锁定的表的所有选择。

答案 1 :(得分:0)

要在MySQL服务器中完成隔离级别,您可以使用SET SESSION命令更改会话隔离模式。

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ;

上述语句将像WITH(nolock)一样工作,即READ UNCOMMITTED数据。您还可以为所有连接全局设置隔离级别。

SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;

MySQL服务器中有两个与隔离级别相关的系统变量。

SELECT @@global.tx_isolation;
SELECT @@tx_isolation;

第一个语句将返回全局隔离级别,第二个语句将仅返回当前会话。

在SQL Server中,您还可以像这样在事务级别设置隔离级别。

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO

reade more @:mysql with nolock