查看正在被鎖定的的表
show OPEN TABLES where In_use > 0;
in_use:多少個線程在使用
name_locked:是否被鎖
查詢哪些線程正在運行
show processlist;
最關鍵的就是state列
查看正在鎖的事務
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
查看等待鎖的事務
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
在事務當中,Tansaction isolation level 為REPEATABLE READ(可重讀)情況,鎖的操作
mysql> select k from t where id=1 lock in share mode; #樂觀鎖(s鎖,共享鎖),可讀
mysql> select k from t where id=1 for update; #悲觀鎖,排他鎖
悲觀鎖:在讀取數據時鎖住那幾行,其他對這幾行的更新需要等到悲觀鎖結束時才能繼續 。
樂觀所:讀取數據時不鎖,更新時檢查是否數據已經被更新過,如果是則取消當前更新,一般在悲觀鎖的等待時間過長而不能接受時我們才會選擇樂觀鎖。
注:for update 僅適用於InnoDB,並且必須開啟事務,在begin與commit之間才生效。
查Mysql服務器上的版本
mysql> select version();
查看表的引擎
mysql> show create table t;
或者
mysql> show table status from 庫名 where name='t' \G
查mysql當前默認的存儲引擎:
mysql> show variables like '%storage_engine%';
查整個MySQL實例里面存儲引擎為MyISAM的表
mysql> select table_catalog
,table_schema
,table_name
,engine
from information_schema.tables
where engine='MyISAM';
查詢MyDB數據庫里面存儲引擎為MyISAM的表
mysql> select table_catalog
,table_schema
,table_name
,engine
from information_schema.tables
where table_schema='MyDB' and engine='MyISAM';