mysql 查詢正在執行的事務以及等待鎖 常用的sql語句


使用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
 
  1. select  *  from information_schema.`PROCESSLIST`(show processlist;)  

 

概念:

    mysql中database、instance、session。

 

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

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

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

     jdbc協議連接數據庫:jdbc:mysql://localhost:3306/test    jdbc協議連接本地上端口為3306實例下的test數據庫,則查詢數據表      時不需要加上數據庫的名字。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM