2009-01-18 141 views
2

我读过很多次,MySQL会在插入过程中在MyISAM表上执行表级锁。如果该锁只适用于序列化插入/删除命令,那我可以。插入在我的网站上很少出现。在MySQL插入过程中,表级锁定会锁定什么?

但是,该锁是否会阻止所有Select查询,直到insert命令完成?

回答

2

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

+0

myisam上的新记录插入(到表的末尾)不会锁定整个表。 – 2009-06-18 09:57:57

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 

里德更多@:

+4

他正在使用MyISAM,它不是事务性的。所以这根本不起作用。 – derobert 2009-01-21 06:29:02