Mysql的鎖表,鎖行記錄

2022-09-23 08:47:06 字數 1358 閱讀 3891

檢視正在被鎖定的的表

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';

MySQL 行鎖 表鎖

1 多個事務操作同一行資料時,後來的事務處於阻塞等待狀態。這樣可以避免了髒讀等資料一致性的問題。後來的事務可以操作其他行資料,解決了表鎖高併...

MySQL的表管理

首先,先選擇資料庫 極其特別重要,如果不選擇,將預設為第一個資料庫 mysql usedb name 檢視所有表 mysql show tables 1 建立表 create table table name field1 datatype field1 為自己起的列名稱 field2 dataty...

報表 動態列(mysql 行轉列)

1 平常資料庫表明細都是存的明細,比如這種 需要轉換成這種 1 sql 查詢如下 select student name group con...