mysql-事务2-多事务并发

多事务并发问题

参考地址:https://dev.mysql.com/doc/refman/5.7/en/

问题:

我在做项目的时候想到一个问题,在多线程的情况下,如果多个事务同时修改一条数据,mysql会如何处理?

结论:https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html
详情请看下面测试

1.我们先创建一张表
CREATE TABLE `t` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `num` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

INSERT INTO `t` (`id`, `num`) VALUES ('1', '100');

2.测试
(1)先查看mysql默认的事务隔离级别

mysql-事务2-多事务并发_第1张图片

(2)事务修改一条数据时,对其他连接的查询有无影响?
结论:无影响,对其他的连接的查询不产生影响(不管有无事务)

数据库连接-1 当前事务查询有影响
mysql-事务2-多事务并发_第2张图片
数据库连接-2 无事务查询无影响
mysql-事务2-多事务并发_第3张图片
数据库连接-3 其他事务查询无影响
mysql-事务2-多事务并发_第4张图片

(3)修改一条数据时,其他连接也在修改这条数据的情况如何
结论:当连接1的事务开启并修改一条数据, 其他连接对该条数据的修改将被挂起暂停, 直到连接1的事务完成

数据库连接-1 事务开启后修改一条数据后,不提交也不回滚
mysql-事务2-多事务并发_第5张图片
数据库连接-2 普通修改:一直在等待 ,等待连接1的事务完成
mysql-事务2-多事务并发_第6张图片
数据库连接-3 事务修改:一直在等待,等待连接1的事务完成
mysql-事务2-多事务并发_第7张图片

你可能感兴趣的:(mysql)