返回 Bug 清单
BUG-0364project-29高已修复backend-logic
手写 BEGIN/COMMIT 拼 SQL 事务 —— 连接池下根本不在同一连接,merge 接口 500
发现:2026-10-01验证:2026-10-09置信度:95%
症状
账户合并接口偶发 500 且数据可能只改了一半——『事务』从未真正生效。
根因
连接池模式下,裸 BEGIN 与后续语句可能落在不同连接上:BEGIN 开在连接 A,UPDATE 走了连接 B,COMMIT 提交的是连接 A 的空事务。事务原子性必须由『同一连接上的事务 API』保证,SQL 字符串拼不出来。
修复方案
1) 一律改用 ORM/驱动的事务 API(db.transaction(async tx => ...)),闭包内所有语句显式用 tx 句柄;
2) code review 规则:业务代码出现裸 BEGIN/COMMIT/ROLLBACK 字符串即打回;
3) 带写路径的接口加集成测试:中途抛错后断言『什么都没发生』。
检测命令
grep -rn 'BEGIN\|COMMIT' --include='*.ts' --include='*.js' <db 层> | grep -v transaction(错误签名
merge 接口 500;代码里对 db 对象手写 BEGIN/COMMIT 语句包裹多条操作技术信息
来源项目
project-29
标签
transaction, connection-pool, atomicity, data-integrity