http://dev.mysql.com/doc/refman/5.0/en/internal-locking.html
以下是文档摘录.
mysql> LOCK TABLES real_table WRITE, temp_table WRITE;
mysql> INSERT INTO real_table SELECT * FROM temp_table;
mysql> DELETE FROM temp_table;
mysql> UNLOCK TABLES;
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我在shell脚本代码中使用此逻辑,并且如果线程在到达"unlock tables"语句之前丢失(未被杀死),我将如何知道某些表被锁定以及如何手动解锁表?
Kos*_*tyn 124
这是我对MySQL中某些锁定表的FORCE UNLOCK所做的事情
1)输入MySQL
mysql -u your_user -p
Run Code Online (Sandbox Code Playgroud)
2)让我们看一下锁定表的列表
mysql> show open tables where in_use>0;
Run Code Online (Sandbox Code Playgroud)
3)让我们看一下当前进程的列表,其中一个是锁定你的表
mysql> show processlist;
Run Code Online (Sandbox Code Playgroud)
4)让我们杀死其中一个进程
mysql> kill put_process_id_here;
Run Code Online (Sandbox Code Playgroud)
Dev*_*art 27
我怎么知道有些桌子被锁了?
您可以使用SHOW OPEN TABLES命令查看锁定的表.
如何手动解锁表格?
如果您知道锁定表的会话ID - 'SELECT CONNECTION_ID()',那么您可以运行KILL命令来终止会话和解锁表.