查询:
SELECT COUNT(online.account_id) cnt from online;
但是online表也会被事件修改,所以我经常可以通过运行show processlist
看到锁。
在MySQL中有什么语法可以让select语句不引起锁吗?
我忘了在上面提到它是在一个MySQL从数据库上。
在我添加到my.cnf:transaction-isolation = READ-UNCOMMITTED
中后,从站将遇到错误:
错误‘无法进行二进制日志记录。消息: InnoDB中的事务级别'READ-UNCOMMITTED’对于查询的binlog模式‘STATEMENT’是不安全的
那么,有没有兼容的方法来做到这一点呢?
发布于 2009-05-27 21:27:20
找到一篇标题为"MYSQL WITH NOLOCK“的文章
https://web.archive.org/web/20100814144042/http://sqldba.org/articles/22-mysql-with-nolock.aspx
在MS SQL Server中,您将执行以下操作:
SELECT * FROM TABLE_NAME WITH (nolock)
MYSQL的等价物是
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ;
编辑
Michael Mior建议了以下内容(来自评论)
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
COMMIT ;
发布于 2009-05-27 19:50:58
如果表是InnoDB,请参见http://dev.mysql.com/doc/refman/5.1/en/innodb-consistent-read.html --对于SELECTs“如果设置了innodb_locks_unsafe_for_binlog选项并且事务的隔离级别未设置为SERIALIZABLE,则不指定for UPDATE或LOCK IN SHARE模式的SELECTs”,请参见SERIALIZABLE-- it uses - read (无锁定模式)。因此,从所选表读取的行上不会设置任何锁。
https://stackoverflow.com/questions/917640
复制相似问题