开发者学堂课程【MySQL 高级应用 - 索引和锁:如何锁定一行】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/598/detail/8638
如何锁定一行
目录:
一、主要步骤
二、总结
一、主要步骤
(1)定起点【begin;】
(2)锁定如8号记录
例:select 【* from test_ innodb_ 1ock where a=8 for update;
】
假设8号记录有 a,b,c,d 等多段字段,此时c 出现错误,在修改时即可能由他人的参与同时进行修改。
此时即可运用锁行进行避免
mysq1>select* feom test_innodb_lock;
//进行 select
+------+--------+
| a | b |
+------+--------+
| 1 | b2 |
| 3 | 0629 |
| 4 | 0629 |
| 5 | 0629 |
| 6 | 6000 |
| 7 | 7000 |
| 8 | 8000 |
| 9 | 9002 |
| 1 | b1 |
| 2 | 2000 |
+------+--------+
9 rows in set (0.00 sec )
mysq1>select* feom test_innodb_lock where a=8 for update;
//手工为其上锁,修改此时仅允许自身独占。
session-2回车将出现堵塞。
Query OK,
0 row affected(0.00 sec )
+------+--------+
| a | b |
+------+--------+
| 8 | 8000 |
+------+--------+
1 row in set (0.00 set)
myseq1>
(3)锁行后于 session-2进行修改【b=xxx】,session 进行自己的运行有较为稳定的优点。
当 session-1更改完毕后输入【commit】即可对 session-2进行照常运行
二、总结
select xxx... for update 锁定某一行后,其它的操作会被阻塞。直到锁定行的会话提交 commit