1. 程式人生 > 資料庫 >Mysql查詢正在執行的事務以及等待鎖的操作方式

Mysql查詢正在執行的事務以及等待鎖的操作方式

使用navicat測試學習:

首先使用set autocommit = 0;(取消自動提交,則當執行語句commit或者rollback執行提交事務或者回滾)

在開啟一個執行update

查詢 正在執行的事務:

SELECT * FROM information_schema.INNODB_TRX

根據這個事務的執行緒ID(trx_mysql_thread_id):

從上圖看出對應的mysql 執行緒:一個94362 (第二個正在等待鎖)另一個是93847(第一個update 正在執行 沒有提交事務)

可以使用mysql命令:kill 執行緒id 殺掉執行緒

期間如果並未殺掉持有鎖的執行緒:則第二個update語句提示等待鎖超時

查詢mysql資料庫中還可以使用:

檢視正在鎖的事務

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 

檢視等待鎖的事務

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

查詢mysql資料庫中存在的程序

[sql] view plain copy

select * from information_schema.`PROCESSLIST`(show processlist;)

概念:

mysql中databaseinstancesession

mysql中建立一個會話,不是和具體的資料庫相連線,而是跟instance建立會話(即在navicat上執行一個查詢,可以查詢埠下對應的多個數據庫,查詢時資料庫名+資料表名即可)

在一個物理機上可以建立多個instance,通過port來區分例項。

而一個例項可以建立多個數據庫,即一個會話可以操作一個例項上的多個數據庫。

jdbc協議連線資料庫:jdbc:mysql://localhost:3306/test jdbc協議連線本地上埠為3306例項下的test資料庫,則查詢資料表時不需要加上資料庫的名字。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對我們的支援。如果你想了解更多相關內容請檢視下面相關連結