mysql 不加事务,出现锁问题:SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded

1. 事件还原过程

说明:因涉及隐私数据问题,所以部分数据使用 xxx 表示,涉及表使用的引擎均为:INNODB
1.1 执行批量更新操作 (更新数量较大,查询数量约为:1563787094)

# Query_time: 621.799719  Lock_time: 0.000121 Rows_sent: 0  Rows_examined: 1563787094
# SET timestamp=1637978520;
UPDATE t_advertisement as a, t_campaign as c set a.ad_id = c.ad_id WHERE a.id = c.advertisement_id;

1.2 同一时间,有新增操作,并报错 (无事务,单纯的新增)

# 新增数据:
insert into `t_campaign` xxx;

# 出错信息
SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction (SQL: insert into `t_campaign` xxx)

2. 问题描述?

  1. 第一个操作是更新 t_advertisement,第二个操作是新增 t_campaign,两个操作都没加事务
  2. 上述两个操作均没加锁,为啥报这个错误呢?

3. 扩展 sql 语句

# 查看 sql 线程
SHOW FULL PROCESSLIST;

# 查看当前运行所有的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 4

更新期间有其他业务操作加锁了?

2年前 评论

有长事务 导致其他事务超时了

2年前 评论

第一条更新 sql 的操作时间过长,把表锁了吧

2年前 评论

写操作是自动加锁的,估计是update语句导致锁表了

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!