亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

基于更新SQL語句理解MySQL鎖定詳解

2024-07-25 19:09:21
字體:
來源:轉載
供稿:網友

前言

MySQL數據庫鎖是實現數據一致性,解決并發問題的重要手段。數據庫是一個多用戶共享的資源,當出現并發的時候,就會導致出現各種各樣奇怪的問題,就像程序代碼一樣,出現多線程并發的時候,如果不做特殊控制的話,就會出現意外的事情,比如“臟“數據、修改丟失等問題。所以數據庫并發需要使用事務來控制,事務并發問題需要數據庫鎖來控制,所以數據庫鎖是跟并發控制和事務聯系在一起的。

本文主要描述基于更新SQL語句來理解MySQL鎖定。下面話不多說了,來一起看看詳細的介紹吧

一、構造環境

(root@localhost) [user]> show variables like 'version';+---------------+------------+| Variable_name | Value |+---------------+------------+| version | 5.7.23-log |+---------------+------------+(root@localhost) [user]> desc t1;+-------------+--------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------------+--------------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || n | int(11) | YES | | NULL | || table_name | varchar(64) | YES | | NULL | || column_name | varchar(64) | YES | | NULL | || pad | varchar(100) | YES | | NULL | |+-------------+--------------+------+-----+---------+----------------+(root@localhost) [user]> select count(*) from t1;+----------+| count(*) |+----------+| 3406 |+----------+(root@localhost) [user]> create unique index idx_t1_pad on t1(pad);Query OK, 0 rows affected (0.35 sec)Records: 0 Duplicates: 0 Warnings: 0(root@localhost) [user]> create index idx_t1_n on t1(n);Query OK, 0 rows affected (0.03 sec)Records: 0 Duplicates: 0 Warnings: 0(root@localhost) [user]> show index from t1;+-------+------------+------------+--------------+-------------+-----------+-------------+------+------------+| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Null | Index_type |+-------+------------+------------+--------------+-------------+-----------+-------------+------+------------+| t1 | 0 | PRIMARY | 1 | id | A | 3462 | | BTREE || t1 | 0 | idx_t1_pad | 1 | pad | A | 3406 | YES | BTREE || t1 | 1 | idx_t1_n | 1 | n | A | 12 | YES | BTREE |+-------+------------+------------+--------------+-------------+-----------+-------------+------+------------+select 'Leshami' author,'http://blog.csdn.net/leshami' Blog;+---------+------------------------------+| author | Blog |+---------+------------------------------+| Leshami | http://blog.csdn.net/leshami |+---------+------------------------------+

二、基于主鍵更新

(root@localhost) [user]> start transaction;Query OK, 0 rows affected (0.00 sec)(root@localhost) [user]> update t1 set table_name='t1' where id=1299;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0SELECT trx_id, trx_state, trx_started, trx_mysql_thread_id, trx_tables_locked, trx_rows_locked, trx_rows_modified, trx_isolation_levelFROM INFORMATION_SCHEMA.INNODB_TRX /G-- 從下面的結果可知,trx_rows_locked,一行被鎖定 *************************** 1. row *************************** trx_id: 6349647 trx_state: RUNNING trx_started: 2018-11-06 16:54:12trx_mysql_thread_id: 2 trx_tables_locked: 1 trx_rows_locked: 1 trx_rows_modified: 1trx_isolation_level: REPEATABLE READ (root@localhost) [user]> rollback;Query OK, 0 rows affected (0.01 sec)

三、基于二級唯一索引

(root@localhost) [user]> start transaction;Query OK, 0 rows affected (0.00 sec)(root@localhost) [user]> update t1 set table_name='t2' where pad='4f39e2a03df3ab94b9f6a48c4aecdc0b';Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0SELECT trx_id, trx_state, trx_started, trx_mysql_thread_id, trx_tables_locked, trx_rows_locked, trx_rows_modified, trx_isolation_levelFROM INFORMATION_SCHEMA.INNODB_TRX /G-- 從下面的查詢結果可知,trx_rows_locked,2行被鎖定*************************** 1. row *************************** trx_id: 6349649 trx_state: RUNNING trx_started: 2018-11-06 16:55:22trx_mysql_thread_id: 2 trx_tables_locked: 1 trx_rows_locked: 2 trx_rows_modified: 1trx_isolation_level: REPEATABLE READ (root@localhost) [user]> rollback;Query OK, 0 rows affected (0.00 sec)

三、基于二級非唯一索引

(root@localhost) [user]> start transaction;Query OK, 0 rows affected (0.00 sec)(root@localhost) [user]> update t1 set table_name='t3' where n=8;Query OK, 350 rows affected (0.01 sec)Rows matched: 351 Changed: 351 Warnings: 0SELECT trx_id, trx_state, trx_started, trx_mysql_thread_id, trx_tables_locked, trx_rows_locked, trx_rows_modified, trx_isolation_levelFROM INFORMATION_SCHEMA.INNODB_TRX /G --從下面的查詢結果可知,703行被鎖定*************************** 1. row ***************************  trx_id: 6349672  trx_state: RUNNING trx_started: 2018-11-06 17:06:53trx_mysql_thread_id: 2 trx_tables_locked: 1 trx_rows_locked: 703 trx_rows_modified: 351trx_isolation_level: REPEATABLE READ(root@localhost) [user]> rollback;Query OK, 0 rows affected (0.00 sec)

四、無索引更新

(root@localhost) [user]> start transaction;Query OK, 0 rows affected (0.00 sec)(root@localhost) [user]> update t1 set table_name='t4' where column_name='id';Query OK, 26 rows affected (0.00 sec)Rows matched: 26 Changed: 26 Warnings: 0SELECT trx_id, trx_state, trx_started, trx_mysql_thread_id, trx_tables_locked, trx_rows_locked, trx_rows_modified, trx_isolation_levelFROM INFORMATION_SCHEMA.INNODB_TRX /G-- 從下面的查詢結果可知,trx_rows_locked,3429行被鎖定,而被更新的僅僅為26行-- 而且這個結果超出了表上的總行數3406*************************** 1. row ***************************  trx_id: 6349674  trx_state: RUNNING trx_started: 2018-11-06 17:09:41trx_mysql_thread_id: 2 trx_tables_locked: 1 trx_rows_locked: 3429 trx_rows_modified: 26trx_isolation_level: REPEATABLE READ(root@localhost) [user]> rollback;Query OK, 0 rows affected (0.00 sec)-- 也可以通過show engine innodb status進行觀察show engine innodb status/G------------TRANSACTIONS------------Trx id counter 6349584Purge done for trx's n:o < 0 undo n:o < 0 state: running but idleHistory list length 0LIST OF TRANSACTIONS FOR EACH SESSION:---TRANSACTION 421943222819552, not started0 lock struct(s), heap size 1136, 0 row lock(s)---TRANSACTION 6349583, ACTIVE 2 sec2 lock struct(s), heap size 1136, 1 row lock(s), undo log entries 1------------TRANSACTIONS------------Trx id counter 6349586Purge done for trx's n:o < 6349585 undo n:o < 0 state: running but idleHistory list length 1LIST OF TRANSACTIONS FOR EACH SESSION:---TRANSACTION 421943222819552, not started0 lock struct(s), heap size 1136, 0 row lock(s)---TRANSACTION 6349585, ACTIVE 8 sec3 lock struct(s), heap size 1136, 2 row lock(s), undo log entries 1MySQL thread id 2, OS thread handle 140467640694528, query id 29 localhost root

五、鎖相關查詢SQL

1:查看當前的事務

SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

2:查看當前鎖定的事務

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;

3:查看當前等鎖的事務

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;SELECT trx_id, trx_state, trx_started, trx_mysql_thread_id thr_id, trx_tables_locked tb_lck, trx_rows_locked rows_lck, trx_rows_modified row_mfy, trx_isolation_level is_lvlFROM INFORMATION_SCHEMA.INNODB_TRX;SELECT r.`trx_id` waiting_trx_id, r.`trx_mysql_thread_id` waiting_thread, r.`trx_query` waiting_query, b.`trx_id` bolcking_trx_id, b.`trx_mysql_thread_id` blocking_thread, b.`trx_query` block_queryFROM information_schema.`INNODB_LOCK_WAITS` w INNER JOIN information_schema.`INNODB_TRX` b ON b.`trx_id` = w.`blocking_trx_id` INNER JOIN information_schema.`INNODB_TRX` r ON r.`trx_id` = w.`requesting_trx_id`;

六、小結

1、MySQL表更新時,對記錄的鎖定根據更新時where謂詞條件來確定鎖定范圍

2、對于聚簇索引過濾,由于索引即數據,因為僅僅鎖定更新行,這是由聚簇索引的性質決定的

3、對于非聚簇唯一索引過濾,由于需要回表,因此鎖定為唯一索引過濾行數加上回表行數

4、對于非聚簇非唯一索引過濾,涉及到了間隙鎖,因此鎖定的記錄數更多

5、如果過濾條件無任何索引或無法使用到索引,則鎖定整張表上所有數據行

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久影视免费观看| 国产99在线|中文| 国产精品专区第二| 一区二区在线视频| 97超级碰碰人国产在线观看| 热99久久精品| 国产成人在线视频| 久久精品夜夜夜夜夜久久| 亚洲精品国产福利| 色偷偷av一区二区三区乱| 国产精品白嫩初高中害羞小美女| 在线视频精品一| 久久久精品免费视频| 亚洲天天在线日亚洲洲精| 久久综合久中文字幕青草| 在线a欧美视频| 日韩有码片在线观看| 日韩一二三在线视频播| 国产欧美精品xxxx另类| 日韩欧美有码在线| 久久人人爽人人爽人人片亚洲| 久久久久久亚洲精品中文字幕| 宅男66日本亚洲欧美视频| 蜜月aⅴ免费一区二区三区| 国产精品高潮视频| 欧美午夜影院在线视频| 色爱av美腿丝袜综合粉嫩av| 亚洲自拍在线观看| 日本一区二区在线播放| 欧美视频在线免费看| 精品国产一区二区在线| 国产不卡一区二区在线播放| 国模极品一区二区三区| 欧美日韩美女在线观看| 亚洲欧美精品伊人久久| 91福利视频网| 欧美午夜精品久久久久久久| 亚洲午夜性刺激影院| 日韩理论片久久| 亚洲va码欧洲m码| 国产免费一区二区三区在线能观看| 疯狂欧美牲乱大交777| 国产精品成av人在线视午夜片| 日韩成人激情视频| 懂色av中文一区二区三区天美| 国内精品400部情侣激情| 在线日韩av观看| 国产精品一区二区三区成人| 亚洲欧洲高清在线| 国产精品久久精品| 久久综合免费视频| 亚洲老板91色精品久久| 欧美肥臀大乳一区二区免费视频| 欧美精品在线网站| 成人精品福利视频| 91久久久久久久久久久久久| 久久精品成人一区二区三区| …久久精品99久久香蕉国产| 亚洲人成网站777色婷婷| 日韩中文字幕在线视频播放| 九九热最新视频//这里只有精品| 蜜臀久久99精品久久久久久宅男| 欧美国产日韩一区二区三区| 在线观看欧美日韩| 国产精品老女人视频| 精品国产一区二区三区久久狼5月| 亚洲午夜精品视频| 亚洲精品久久久久久久久| 欧美一区在线直播| 亚洲日本成人女熟在线观看| 日韩电影中文字幕一区| 精品亚洲一区二区三区四区五区| 久久精品视频亚洲| 国产一区在线播放| 久久最新资源网| 国产美女直播视频一区| 成人久久久久久久| 日韩免费视频在线观看| 国产精品美女www| 国产精品精品视频一区二区三区| 国产91色在线| 欧美激情精品久久久久久免费印度| 欧美巨乳美女视频| 日韩国产中文字幕| 欧美成人一二三| 欧美丝袜一区二区| 国产精品视频自拍| 亚洲国产精品久久久久秋霞不卡| 日韩天堂在线视频| 日韩在线视频线视频免费网站| 亚洲成人精品在线| 亚洲欧美日韩高清| 91网站在线免费观看| 亚洲精品91美女久久久久久久| 中文字幕九色91在线| 免费av在线一区| 久久99视频免费| 亚洲精品久久久一区二区三区| 国产精品va在线播放| 国产精品黄视频| 久久久久久久久91| 日韩女优人人人人射在线视频| 最新日韩中文字幕| 最近2019好看的中文字幕免费| 久久久欧美精品| 欧美一性一乱一交一视频| 91国内揄拍国内精品对白| 日韩中文字幕在线精品| 亚洲精品成人av| 奇米成人av国产一区二区三区| 亚洲欧洲在线播放| 国产精品三级美女白浆呻吟| 成人亚洲综合色就1024| 中文字幕免费精品一区| 在线视频欧美日韩精品| 久久99久久99精品免观看粉嫩| 欧美孕妇毛茸茸xxxx| 亚洲精品自拍偷拍| 国产精品第七十二页| 久久视频在线视频| 神马久久桃色视频| 亚洲视频专区在线| xxx一区二区| 国产亚洲精品久久久久久| 国产精品女主播视频| 久久久久中文字幕2018| 中文字幕在线亚洲| 久久久久国产精品免费| 国产精品一区二区三区毛片淫片| 亚洲天堂精品在线| 国产精品吹潮在线观看| 高清一区二区三区四区五区| 国产婷婷成人久久av免费高清| 久久久噜噜噜久久中文字免| 国产玖玖精品视频| www高清在线视频日韩欧美| 国产精品免费视频久久久| 欧美激情免费看| 国产精品美女免费视频| 中文字幕成人精品久久不卡| 九九精品视频在线| 欧美亚洲第一页| 最好看的2019年中文视频| 日韩免费视频在线观看| 国产精品欧美日韩久久| 亚洲人成电影在线| 日本久久久久亚洲中字幕| 黄色成人av在线| 亚洲一区二区少妇| 91免费欧美精品| 91久久国产精品91久久性色| 国产欧美日韩丝袜精品一区| 久久精品国产96久久久香蕉| 26uuu日韩精品一区二区| 视频直播国产精品| 欧美日韩在线影院| 亚洲成人久久网| 8050国产精品久久久久久| 久久综合国产精品台湾中文娱乐网| 久久免费视频网站| 亚洲香蕉成人av网站在线观看| 国产69精品久久久| 亚洲欧美在线播放| 国产精品久久久久久久久久久新郎|