在 MySQL 中显示锁
在本文中,我们将学习如何在 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)
相关文章
如何在 MySQL 中声明和使用变量
发布时间:2024/03/26 浏览次数:115 分类:MySQL
-
当你需要在 MySQL 中的脚本中存储单个值时,最好的方法是使用变量。变量有不同的种类,有必要知道何时以及如何使用每种类型。
在 MySQL 中使用 Mysqladmin 刷新主机解除阻塞
发布时间:2024/03/26 浏览次数:82 分类:MySQL
-
你将了解阻止主机的原因。此外,通过使用 phpMyAdmin 和命令提示符刷新主机缓存来解除阻塞的不同方法和效果。