MySQL 中不加锁选择数据
查询被事件主动修改的表时,有可能会遇到表锁,这会导致影响性能。有没有办法在 MySQL 中执行 select 语句时不会导致此类锁?
从数据库的解决方案
标题为“MYSQL WITH”的文章中提到的解决方案NOLOCK”在这种情况下不适用,因为它是从数据库。此外,将事务隔离级别设置为 READ-UNCOMMITTED 将导致配置为基于 STATEMENT 的二进制日志记录的从属数据库出现错误。
MySQL 特定方法
为了避免在MySQL从库上选择数据时锁定,可以使用以下方法:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT COUNT(online.account_id) cnt from online; COMMIT;
此方法临时设置将事务隔离级别设置为 READ UNCOMMITTED,这允许 select 语句在不获取锁的情况下继续进行。但是,请务必记住,此设置只能在具有后续 COMMIT 语句的事务中使用。
改进建议
作为替代方案,您可以考虑使用Michael Mior 建议的以下语法:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT COUNT(online.account_id) cnt from online; COMMIT;
以上是如何在不加锁的情况下从MySQL从数据库中选择数据?的详细内容。更多信息请关注PHP中文网其他相关文章!