迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MySQL >

在 MySQL 中显示锁

作者:迹忆客 最近更新:2023/05/06 浏览次数:

在本文中,我们将学习如何在 MySQL 中显示锁。


在 MySQL 中显示锁

可以通过向表分配 MySQL 锁定标志来更改表的属性。 为了限制其他会话在特定时间段内访问同一个表,MySQL 启用了客户端服务器可能分配的表锁。

客户端只能为其会话获取或释放 MySQL 锁。 这意味着客户端无法访问不同会话的锁或释放不同会话持有的锁。

MySQL提供了两种锁:读锁和写锁。

LOCK TABLES table_name READ as alias_table_name

这里的table_name表示需要加锁的表。 使用别名锁定表时,必须在语句中使用该别名来引用锁定的表。

如果会话具有 READ 锁,则他们无法对表执行写操作。 这是因为 READ 锁只能从表中读取数据。

在不释放 READ 锁的情况下,其他会话不能向表中写入数据; 因此他们都被阻止这样做。 在我们释放 READ 锁之前,写操作进入等待状态。

作为 MDL 重新实现的结果,使用 GET_LOCK() 获得的唯一命名锁显示在性能模式元数据锁表中。 锁名称显示在 OBJECT_NAME 列中,而 OBJECT_TYPE 列显示 USER LEVEL LOCK。

您可以借助这些知识了解会话之间的元数据锁依赖关系。 您不仅可以看到会话正在等待哪个锁,还可以看到现在哪个锁在控制。

无法更改元数据锁表; 它是只读的。

请考虑以下示例,以帮助您更好地理解先前的想法。

SELECT GET_LOCK('alias_table_name', 10);
SELECT * FROM performance_schema.metadata_locks WHERE OBJECT_TYPE='USER LEVEL LOCK'

前面示例中的第一条语句获取提供的锁名称的数据。 在这种情况下,alias_table_name 指定锁的名称,10 代表超时。

从元数据锁表中检索信息,其中对象类型是第二个语句中的 USER LEVEL LOCK

在与 MySQL 兼容的任何浏览器中运行上面的代码行。 它将显示以下结果:

+----------------------------------+
| GET_LOCK('alias_table_name', 10) |
+----------------------------------+
|                                1 |
+----------------------------------+
1 row in set (0.00 sec)

*************************** 1. row ***************************
          OBJECT_TYPE: USER LEVEL LOCK
        OBJECT_SCHEMA: NULL
          OBJECT_NAME: alias_table_name
OBJECT_INSTANCE_BEGIN: 139872019610944
            LOCK_TYPE: EXCLUSIVE
        LOCK_DURATION: EXPLICIT
          LOCK_STATUS: GRANTED
               SOURCE: item_func.cc:5481
      OWNER_THREAD_ID: 35
       OWNER_EVENT_ID: 3
1 row in set (0.00 sec)

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

使用 Mysqldump 备份 MySQL 中的数据

发布时间:2023/05/09 浏览次数:192 分类:MySQL

本篇文章将介绍如何使用 mysqldump 只备份数据。 在这里,我们将探讨 --no-create-info 、--compact 、--skip-triggers 和 --no-create-db 选项。

更新 MySQL 表中的主键

发布时间:2023/05/09 浏览次数:61 分类:MySQL

本篇文章介绍如何更新 MySQL 表中的主键。 我们将使用 ALTER 命令对主键进行任何更改。更新 MySQL 表中的主键 我们可以在多种情况下更新 MySQL 表中的主键。

在 MySQL 中获取命令历史记录

发布时间:2023/05/09 浏览次数:150 分类:MySQL

本文重点介绍了在 Windows 和 Linux 中获取我们已执行的 MySQL 命令历史记录的各种方法。MySQL命令历史

Oracle 的 decode 函数在 MySQL 中的等价物

发布时间:2023/05/09 浏览次数:115 分类:MySQL

本篇文章介绍了三种替代实现,我们可以将它们用作 MySQL 中 Oracle 的 decode() 函数的等价物。 为此,我们将使用 IF()、CASE 以及 FIELD() 和 ELT() 的组合。

在 Linux 中安装 MySQL 客户端

发布时间:2023/05/09 浏览次数:72 分类:MySQL

在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。

在 MySQL 中转换为十进制

发布时间:2023/05/09 浏览次数:150 分类:MySQL

有时,我们可能需要将一种数据类型转换为另一种数据类型。 下面是我们如何使用带有 DECIMAL(M,D) 的 CAST() 和 CONVERT() 函数在 MySQL 中转换为十进制。

在 MySQL 中获取当前日期和时间

发布时间:2023/05/09 浏览次数:145 分类:MySQL

本篇文章我们将学习 NOW()、CURRENT_TIMESTAMP()(也写为 CURRENT_TIMESTAMP)和 SYSDATE() 来获取 MySQL 中的当前日期和时间。 我们还将看到这三个功能之间的比较。在 MySQL 中获取当前日期和时间

更改 MySQL 服务器中的 max_allowed_packet Size

发布时间:2023/05/09 浏览次数:142 分类:MySQL

本篇文章介绍如何更改 MySQL 服务器中的 max_allowed_packet 大小。 为了了解这一点,我们将使用两个操作系统,Windows 10 和 Linux (Ubuntu)。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便