欢迎来到思维库

思维库

不同于Oracle:MySQL的insert会阻塞update

时间:2025-11-05 11:21:10 出处:IT科技阅读(143)

某银行客户在从Oracle迁移到MySQL的不同开发中,MySQL在READ-COMMITTED隔离级别下,阻塞出现了insert阻塞update的不同情况,但同样的阻塞情况下,Oracle的不同insert则不会阻塞update。本文通过复现该问题,阻塞分析MySQL的免费信息发布网不同锁信息,确认是阻塞MySQL与Oracle在并发事务处理上的差异,在进行数据库迁移改造的不同程序开发应予以关注。

1.问题复现

1.1.环境准备

MySQL版本的阻塞8.0.26,隔离级别是不同READ-COMMITTED ,网站模板测试表t的阻塞字段a为主键。

不同于Oracle:MySQL的insert会阻塞update

复制mysql> select version();+-----------+| version() |+-----------+| 8.0.26 |+-----------+1 row in set (0.02 sec)mysql> show variables like transaction_isolation;+-----------------------+----------------+| Variable_name | Value |+-----------------------+----------------+| transaction_isolation | READ-COMMITTED |+-----------------------+----------------+1 row in set (0.00 sec)mysql> desc t;+-------+------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+------+------+-----+---------+-------+| a | int | NO | PRI | NULL | || b | int | YES | | NULL | |+-------+------+------+-----+---------+-------+2 rows in set (0.01 sec)mysql> select * from t;+---+------+| a | b |+---+------+| 7 | 7 |+---+------+1 row in set (0.00 sec)1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.

1.2. insert阻塞update的不同操作步骤

insert语句未提交时,update同样主键的阻塞数据会被阻塞。

session1

session2

插入一条数据(a=8)后未提交。不同

mysql> begin;

Query OK, 0 rows affected (0.00 sec)

mysql> insert into t values(8,8);

Query OK, 1 row affected (0.01 sec)

更改数据,条件是a=8,将会被阻塞

mysql> update t set b=0 where a=8;

<<挂起,b2b信息网等待innodb_lock_wait_timeout超时

2.分析原因

2.1.检查事务锁信息

复制mysql> select * from information_schema.innodb_trx

\G

分享到:

温馨提示:以上内容和图片整理于网络,仅供参考,希望对您有帮助!如有侵权行为请联系删除!

友情链接: