2010-03-23 83 views

回答

9

你不能对非指定的锁!

更多信息: http://forums.mysql.com/read.php?21,222363,223774#msg-223774

除非你先用一个咨询锁。您可能还想考虑使用INSERT DELAYED。

但是,您可以使用SHOW OPEN TABLES来显示每个表的状态。

还有像“MetaLock”这样的可怕的事情,我很高兴你没有遇到这种情况。

2

article介绍如何获取有关锁定MySQL的资源信息。 mysqladmin debug也可能有一定用处。

+1

很好,但是MyISAM被锁定了吗?欢呼声 – Marcin 2010-03-23 13:56:48

+0

对不起,帮不了你。 – 2010-03-23 15:02:12

4

如果你做一个GET_LOCK(lockName, 0)以0超时你锁定表,然后按照之前,您可以创建自己的锁用GET_LOCK(锁名称,超时)

与一个RELEASE_LOCK(lockName)那么所有其他线程执行GET_LOCK()将得到一个值0,这将告诉他们该锁被另一个线程持有。

但是,如果在锁定表之前没有所有调用GET_LOCK()的线程,这都不起作用。锁定表的文档是here

希望有帮助!

+1

这只适用于命名锁什么是非命名锁? – Marcin 2010-04-05 12:32:55

+0

你不能用于非命名锁 – 2010-04-06 16:31:27

42

您可以使用SHOW OPEN TABLES来显示每个表的锁定状态。有关该命令的文档页面的更多详细信息是here

0

最简单的方法是:

SHOW OPEN TABLES WHERE In_use > 0 

你只能得到当前数据库的锁定表。