Mysql 鎖總結

來源:互聯網
上載者:User

標籤:evel   create   oca   ssl   tab   引擎   str   lock   local   

MyISAM 只支援表鎖
show create table crm_member; ##查看引擎alter table crm_member engine = MyISAM; ##更改表引擎
讀鎖示範

Session 1 讀鎖 其它session可以讀不可寫

lock table crm_member read;

Session 1 鎖等待時間設定

select @@global.lock_wait_timeout; ##查看鎖等待時間設定set @@global.lock_wait_timeout = 20; ##設定鎖等待時間為20秒

Session 2 查詢資料 不影響

MariaDB [member]> select name from crm_member where id = 4;+------+| name |+------+| 222  |+------+1 row in set (0.00 sec)

Session 2 更新資料

MariaDB [member]> MariaDB [member]> update crm_member set name = ‘222‘ where id = 4;## 進入鎖等待

Session 1 查看進程

show processlist;| 97 | root | localhost           | member | Query   |   120 | Waiting for table level lock | update crm_member set name = ‘222‘ where id = 4 |    0.000 |## 等待一個表層級的鎖

Session 1 釋放鎖

MariaDB [member]> unlock tables;Query OK, 0 rows affected (0.00 sec)

Session 2 獲得鎖 立即更新資料

MariaDB [member]> update crm_member set name = ‘222‘ where id = 4;Query OK, 0 rows affected (3 min 9.38 sec)Rows matched: 1  Changed: 0  Warnings: 0

Session 2 鎖等待逾時

MariaDB [member]> update crm_member set name = ‘222‘ where id = 4;ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
寫鎖示範

Session 1 添加寫鎖

MariaDB [member]> lock table crm_member write;Query OK, 0 rows affected (0.00 sec)

Session 1 添加寫鎖

MariaDB [member]> lock table crm_member write;Query OK, 0 rows affected (0.00 sec)

Session 2 讀資料

MariaDB [member]> select name from crm_member where id = 4;

Session 1 查看進程

MariaDB [member]> show processlist;| 109 | root | localhost           | member | Query   |     2 | Waiting for table metadata lock | select name from crm_member where id = 4 |    0.000 |## 等待一個中繼資料的鎖

Session 2 讀資料 鎖等待逾時

MariaDB [member]> select name from crm_member where id = 4;ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
InnoDB 鎖 既支援表鎖(與MyISAM相同) 也支援 行鎖。排它鎖示範

方式1 Session 1 直接update 其它session不可以讀不可寫 除非快照讀

MariaDB [member]> begin;Query OK, 0 rows affected (0.00 sec)MariaDB [member]> update crm_member set name = ‘aaaaaa‘ where id = 4;Query OK, 1 row affected (0.00 sec)Rows matched: 1  Changed: 1  Warnings: 0

方式2 Session 1 for-update 其它session不可以讀不可寫 除非快照讀

MariaDB [member]> begin;Query OK, 0 rows affected (0.00 sec)MariaDB [member]> select name from crm_member where id = 4 for update;

Session 2 方式1 事務方式 開始更新操作相同的記錄

MariaDB [member]> begin;Query OK, 0 rows affected (0.00 sec)MariaDB [member]> update crm_member set name = ‘bbb‘ where id = 4;## 進入鎖等待

Session 2 方式2 普通更新操作

MariaDB [member]> update crm_member set name = ‘bbb‘ where id = 4;

Session 1 查看進程

MariaDB [member]> show processlist;+-----+------+---------------------+--------+---------+-------+----------+-------------------------------------------------+----------+| Id  | User | Host                | db     | Command | Time  | State    | Info                                            | Progress |+-----+------+---------------------+--------+---------+-------+----------+-------------------------------------------------+----------+| 109 | root | localhost           | member | Query   |     2 | updating | update crm_member set name = ‘ccc‘ where id = 4 |    0.000 |+-----+------+---------------------+--------+---------+-------+----------+-------------------------------------------------+----------+## 有一個更新等待

Session 2 鎖等待逾時

MariaDB [member]> update crm_member set name = ‘bbb‘ where id = 4;ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

Session 1 查看資料 已經更改

MariaDB [member]> select name from crm_member where id = 4;+------+| name |+------+| ccc  |+------+

Session 2 讀取到的資料沒有更改 只能讀取未提交版本的資料

MariaDB [member]> select name from crm_member where id = 4;+------+| name |+------+| bbb  |+------+

Mysql 鎖總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.