MySQL事务中修改的实验

字数 100阅读 5

如果A或B在事务期间涉及到同一行的增删改,另一个事务都会等待。
现在有2行(1,2),如果A修改了1,B修改了2。现在A要修改2(先提交),B要修改1(后提交),此时B会因为死锁直接报异常回滚,由A对1、2行做修改。

用户A:
mysql> update account set count = 800 where id = 2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> update account set count = 100 where id = 1;
Query OK, 1 row affected (2.08 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> select * from account;
+----+-------+
| id | count |
+----+-------+
|  1 |   100 |
|  2 |   800 |
|  3 |  1000 |
+----+-------+
3 rows in set (0.00 sec)
用户B:
mysql> update account set count = 800 where id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from account;
+----+-------+
| id | count |
+----+-------+
|  1 |   800 |
|  2 |   800 |
|  3 |  1000 |
+----+-------+
3 rows in set (0.00 sec)

mysql> update account set count = 8000 where id = 2;
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

推荐阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
  • 什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点。 原子性:要不全部成功,要不全部撤销 隔...
  • 事务处理 事务处理是数据库中的一个大块头,涉及到数据的完整性与一致性问题,由于mysql存在多种数据存储引擎提供给...
  • 目录:1.锁的定义与分类(表、行、页)2.锁相关的语句(查看锁)3.mysql事务4.乐观锁和悲观锁5.数据库死锁...
  • 最近碰到几个业务场景,会遇到并发的问题。在单实例情况下,我们会通过java.util.concurrent包...