【问题标题】:What does table level locking locks during inserts in MySQL?MySQL 中插入期间的表级锁定锁定是什么?
【发布时间】:2010-10-02 01:29:04
【问题描述】:

我多次读到 MySQL 将在插入期间对 MyISAM 表执行表级锁定。如果该锁仅用于序列化插入/删除命令,我可以。无论如何,插入在我的网站上都很少见。

但是在插入命令完成之前,该锁是否也会阻止所有 Select 查询?

【问题讨论】:

    标签: mysql myisam


    【解决方案1】:

    要在 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
    

    阅读更多@:mysql with nolock

    【讨论】:

    • 他正在使用 MyISAM,它不是事务性的。所以这根本行不通。
    【解决方案2】:

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

    【讨论】:

    猜你喜欢
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多