織夢mysql也鎖表 MySQL鎖的用法之表級鎖

2021-10-19 22:02:07 字數 2212 閱讀 6031

鎖機制是資料庫有別於檔案系統的乙個重要的特點,也是用來管理併發訪問的乙個有效的方式。mysql 的鎖分為表級鎖、頁級鎖與行級鎖。表級鎖是mysql中粒度最大的一種鎖,它實現簡單,資源消耗較少,被大部分mysql引擎支援。最常使用的 myisam與innodb都支援表級

鎖機制是資料庫有別於檔案系統的乙個重要的特點,也是用來管理併發訪問的乙個有效的方式。mysql 的鎖分為表級鎖、頁級鎖與行級鎖。表級鎖是mysql中粒度最大的一種鎖,它實現簡單,資源消耗較少,被大部分mysql引擎支援。最常使用的 myisam與innodb都支援表級鎖定。

表級鎖定分為兩類,讀鎖與寫鎖。讀鎖是預期將對資料表進行讀取操作,鎖定期間保證表不能被修改。寫鎖是預期會對資料表更新操作,鎖定期間保證表不能被其他執行緒更新或讀取。

讀鎖:用法:lock table table_name [ as alias_name ] read

指定資料表,lock型別為read即可,as別名是可選引數,如果指定別名,使用時也要指定別名才可

申請讀鎖前提:當前沒有執行緒對該資料表使用寫鎖,否則申請會阻塞。

操作限制:其他執行緒可以對鎖定表使用讀鎖;其他執行緒不可以對鎖定表使用寫鎖

對於使用讀鎖的mysql執行緒,由於讀鎖不允許任何執行緒對鎖定表進行修改,在釋放鎖資源前,該執行緒對錶操作只能進行讀操作,寫操作時會提示非法 操作。而對於其他沒使用鎖的mysql執行緒,對鎖定表進行讀操作可以正常進行,但是進行寫操作時,執行緒會等待讀鎖的釋放,當鎖定表的所有讀鎖都釋放時,線 程才會響應寫操作。

寫鎖:用法:lock table table_name [as alias_name] [ low_priority ] write

別名用法與讀鎖一樣,寫鎖增加了指定優先順序的功能,加入low_priority可以指定寫鎖為低優先順序。

申請寫鎖前提:當沒有執行緒對該資料表使用寫鎖與讀鎖,否則申請回阻塞。

操作限制:其他mysql執行緒不可以對鎖表使用寫鎖、讀鎖

對於使用寫鎖的mysql執行緒,其可以對鎖定表進行讀寫操作。但是對於其他執行緒,對指定表讀寫操作都是非法的,需要等待直到寫鎖釋放。

鎖分配優先順序:

對於鎖分配的優先順序,是: low_priority write < read < write

1、當多個執行緒申請鎖,會優先分配給write鎖,不存在write鎖時,才分配read鎖,low_priority write需要等到write鎖與read都釋放後,才有機會分配到資源。

2、對於相同優先順序的鎖申請,分配原則為誰先申請,誰先分配。

注意事項:

1、不能操作(查詢或更新)沒有被鎖定的表。

例如當只申請table1的讀鎖,sql語句中包含對table2的操作是非法的。例如:

mysql> lock table test read;

query ok, 0 rows affected (0.00 sec)

mysql> select * from test_myisam;

error 1100 (hy000): table 'test_myisam' was not locked with lock tables

2、不能在乙個sql中使用兩次表(除非使用別名)

當sql語句中多次使用一張表時,系統會報錯。例如:

mysql> lock table test read;

query ok, 0 rows affected (0.00 sec)

mysql> select * from test where id in (select id from test );

error 1100 (hy000): table 'test' was not locked with lock tables

解決這個問題的方法是使用別名,如果多次使用到乙個表,需要宣告多個別名。

mysql> lock table test as t1 read, test as t2 read;

query ok, 0 rows affected (0.00 sec)

mysql>  select * from test as t1 where id in (select id from test as t2);

| id | content   |

|  1 | tt_1      |

|  3 | new_3     |

|  4 | new_4     |

|  5 | content_5 |

4 rows in set (0.00 sec)

3、申請鎖時使用別名,使用鎖定表時必須加上別名。

織夢mysql日誌儲存 MySQL日誌筆記

mysql日誌筆記1 mysql日誌比較日誌檔案檔案中的資訊作用錯誤日誌記錄啟動 執行或停止mysqld時出現的問題。系統故障時定位故障原因查詢日誌記錄建立的客戶端連線和執行的語句。記錄發生的所有操作二進位制日誌記錄所有更改資料的語句。資料庫資料備份和複製慢 mysql日誌筆記 1 mysql日誌比...

mysql 織夢 索引 MySQL筆記之索引的使用

mysql筆記之索引的使用 索引是建立在表上的,對資料庫表中一列或多列的值進行排序的一種結構 其作用主要在於提高查詢的速度,降低資料庫系統的效能開銷 通過索引,查詢資料不必讀完記錄的全部資訊進行匹配,而是只查詢索引列 索引相當於字典中的音序表,要查詢某字時可以在音序表中找到 然後直接跳轉到那一音序所...

mysql事物鎖鎖表 mysql 事務 行鎖 表鎖

一 準備 select from information schema.innodb trx 查詢事務 select from information schema.innodb locks 查詢鎖 select from information schema.innodb lock waits 暫...