首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有什么方法可以选择而不会在MySQL中导致锁定?

有什么方法可以选择而不会在MySQL中导致锁定?
EN

Stack Overflow用户
提问于 2009-05-27 19:43:04
回答 9查看 254.7K关注 0票数 149

查询:

代码语言:javascript
复制
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’是不安全的

那么,有没有兼容的方法来做到这一点呢?

EN

回答 9

Stack Overflow用户

发布于 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中,您将执行以下操作:

代码语言:javascript
复制
SELECT * FROM TABLE_NAME WITH (nolock)

MYSQL的等价物是

代码语言:javascript
复制
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ;

编辑

Michael Mior建议了以下内容(来自评论)

代码语言:javascript
复制
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
COMMIT ;
票数 194
EN

Stack Overflow用户

发布于 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 (无锁定模式)。因此,从所选表读取的行上不会设置任何锁。

票数 30
EN

Stack Overflow用户

发布于 2009-05-27 19:51:01

使用

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED.

5.0版文档为here

版本5.1文档为here

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/917640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档