久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL 5.7 SELECT … LOCK IN SHARE MODE

共計(jì) 3294 個(gè)字符,預(yù)計(jì)需要花費(fèi) 9 分鐘才能閱讀完成。

本篇文章為大家展示了 MySQL 5.7 SELECT … LOCK IN SHARE MODE|FOR UPDATE 語(yǔ)句的說(shuō)明是什么,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

在相同的事務(wù)中,如果你在查詢數(shù)據(jù)后,想插入或更新相關(guān)的數(shù)據(jù),常規(guī)的 SELECT 語(yǔ)句無(wú)法提供足夠的保護(hù)。
其他事務(wù)可以更新或刪除你所查詢到的行。InnoDB 引擎支持兩種讀鎖來(lái)提供額外的安全。

一、SELECT … LOCK IN SHARE MODE 在查詢到的行上設(shè)置共享鎖。其他回話可以讀取到這些行,但是不能修改這些行,直到提交事務(wù)后。
如果將 LOCK IN SHARE MODE 用在支持頁(yè)鎖或行鎖的存儲(chǔ)引擎上,查詢所覆蓋的行會(huì)被加上共享鎖,共享鎖允許其他事務(wù)讀,但是不允許其他事務(wù)更新或刪除這些行。

查看測(cè)試表中的數(shù)據(jù),表中只有一個(gè)字段,且字段為主鍵
mysql desc t5;
+——-+———————+——+—–+———+——-+
| Field | Type                | Null | Key | Default | Extra |
+——-+———————+——+—–+———+——-+
| id    | tinyint(3) unsigned | NO   | PRI | NULL    |       |
+——-+———————+——+—–+———+——-+
1 row in set (0.01 sec)
mysql show create table t5;
+——-+———————————————————————————————————————-+
| Table | Create Table                                                                                                         |
+——-+———————————————————————————————————————-+
| t5    | CREATE TABLE `t5` (
  `id` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+——-+———————————————————————————————————————-+
1 row in set (0.00 sec)
mysql select * from t5;
+—-+
| id |
+—-+
| 10 |
| 20 |
| 30 |
| 40 |
| 50 |
+—-+
5 rows in set (0.00 sec)

會(huì)話 1,開(kāi)啟一個(gè)事務(wù),并對(duì) id 范圍為 10 到 30 的數(shù)據(jù)增加共享鎖
mysql start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql select * from t5 where id = 10 and id =30 lock in share mode;
+—-+
| id |
+—-+
| 10 |
| 20 |
| 30 |
+—-+
3 rows in set (0.00 sec)

會(huì)話 2,可以執(zhí)行 SELECT、INSERT 操作,但是對(duì)會(huì)話 1 鎖定的行執(zhí)行 UPDATE 操作會(huì)阻塞,直到超過(guò) InnoDB 鎖的等待時(shí)間,會(huì)話 2 會(huì)自動(dòng)回滾
mysql start transaction;
Query OK, 0 rows affected (0.00 sec)
+—-+
| 10 |
| 20 |
| 30 |
| 40 |
| 50 |
| 60 |
+—-+
6 rows in set (0.00 sec)
mysql insert into t5 values(60);
Query OK, 1 row affected (0.04 sec)
mysql update t5 set id=100 where id=10;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

InnDB 事務(wù)等待行鎖的時(shí)間長(zhǎng)度,默認(rèn)值是 50 秒
mysql show variables like innodb_lock_wait_timeout
+————————–+——-+
| Variable_name            | Value |
+————————–+——-+
| innodb_lock_wait_timeout | 50    |
+————————–+——-+
1 row in set (0.01 sec)

會(huì)話 2,對(duì)會(huì)話 1 鎖定的行執(zhí)行 DELETE 操作會(huì)阻塞

mysql start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql delete from t5 where id=30;
Query OK, 1 row affected (15.31 sec)

會(huì)話 1,提交事務(wù)
mysql commit;
Query OK, 0 rows affected (0.06 sec)

會(huì)話 2,之前阻塞的 DELETE 操作會(huì)生效
mysql delete from t5 where id=30;
Query OK, 1 row affected (15.31 sec)

mysql rollback;

Query OK, 0 rows affected (0.02 sec)

二、如果將 FOR UPDATE 用在支持頁(yè)鎖或行鎖的存儲(chǔ)引擎上,查詢所覆蓋的行會(huì)被加上寫鎖,直到當(dāng)前事務(wù)的結(jié)束。
其他回話可以讀取到這些行,但是不能修改這些行,直到提交事務(wù)后。

會(huì)話 1,開(kāi)啟一個(gè)事務(wù),并對(duì) id 范圍為 10 到 30 的數(shù)據(jù)增加寫鎖
mysql start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql select * from t5 where id = 10 and id =30 for update;
+—-+
| id |
+—-+
| 10 |
| 20 |
| 30 |
+—-+
3 rows in set (0.00 sec)

會(huì)話 2,可以執(zhí)行 SELECT、INSERT 操作,但是對(duì)會(huì)話 1 鎖定的行執(zhí)行 UPDATE 操作會(huì)阻塞,直到超過(guò) InnoDB 鎖的等待時(shí)間,會(huì)話 2 會(huì)自動(dòng)回滾
mysql start transaction;
Query OK, 0 rows affected (0.00 sec)
+—-+
| 10 |
| 20 |
| 30 |
| 40 |
| 50 |
| 60 |
+—-+
6 rows in set (0.00 sec)
mysql insert into t5 values(70);
Query OK, 1 row affected (0.04 sec)

mysql update t5 set id=100 where id=10;

會(huì)話 1,提交事務(wù)
mysql commit;
Query OK, 0 rows affected (0.06 sec)

會(huì)話 2,之前阻塞的 UPDATE 操作會(huì)執(zhí)行成功
mysql update t5 set id=100 where id=10;
Query OK, 1 row affected (15.38 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql rollback;
Query OK, 0 rows affected (0.04 sec)

上述內(nèi)容就是 MySQL 5.7 SELECT … LOCK IN SHARE MODE|FOR UPDATE 語(yǔ)句的說(shuō)明是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-27發(fā)表,共計(jì)3294字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 郑州市| 正蓝旗| 琼海市| 扬中市| 蓬溪县| 济宁市| 乾安县| 新郑市| 玉环县| 扎赉特旗| 张掖市| 昭苏县| 江安县| 德阳市| 衡阳县| 巴彦淖尔市| 安义县| 明水县| 浑源县| 获嘉县| 高碑店市| 同仁县| 休宁县| 乡城县| 射阳县| 黄梅县| 隆化县| 滁州市| 宜丰县| 鄂州市| 财经| 昆山市| 揭阳市| 红原县| 邵东县| 阳曲县| 黔西县| 伊春市| 富锦市| 淳化县| 华蓥市|