溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL鎖的用法介紹

發布時間:2021-08-21 22:43:49 來源:億速云 閱讀:204 作者:chen 欄目:數據庫

這篇文章主要講解了“MySQL鎖的用法介紹”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“MySQL鎖的用法介紹”吧!

鎖機制是數據庫有別于文件系統的一個重要的特點,也是用來管理并發訪問的一個有效的方式。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鎖的用法介紹這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女