We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
因为需要做 UNDO INSERT ON UPDATE EXECUTOR, 因此需要看下这部分代码
核心: 当业务 SQL 中包含 INSERT ... ON DUPLICATE KEY UPDATE 语句时,该 EXECUTOR 需要在执行业务 SQL 前后保存数据库快照(before image 和 after image)。
INSERT ... ON DUPLICATE KEY UPDATE
流程:
细节:
beforeImage 保存了执行业务 SQL 前的状态,用于当全局事务回滚驱动分支事务也回滚时,回滚到没有执行业务 SQL 前的状态 afterImage 保存了执行业务 SQL 后的状态, 用于当需要回滚时,校验当前业务数据是否与 afterImage 记录的数据保持一致,如果一样就回滚,如果不一样,说明数据出现了脏写的情况,需要人工处理
根据业务 SQL 反向查询出被影响的数据, 核心就是生成 beforeSelectSQL, 源码分析todo
todo
seata官网文档
The text was updated successfully, but these errors were encountered:
No branches or pull requests
INSERT ON UPDATE EXECUTOR
因为需要做 UNDO INSERT ON UPDATE EXECUTOR, 因此需要看下这部分代码
实现
核心: 当业务 SQL 中包含
INSERT ... ON DUPLICATE KEY UPDATE
语句时,该 EXECUTOR 需要在执行业务 SQL 前后保存数据库快照(before image 和 after image)。流程:
细节:
INSERT ... ON DUPLICATE KEY UPDATE
不允许 update 主键Q & A
01 beforeImage 和 afterImage 的作用
beforeImage 保存了执行业务 SQL 前的状态,用于当全局事务回滚驱动分支事务也回滚时,回滚到没有执行业务 SQL 前的状态
afterImage 保存了执行业务 SQL 后的状态, 用于当需要回滚时,校验当前业务数据是否与 afterImage 记录的数据保持一致,如果一样就回滚,如果不一样,说明数据出现了脏写的情况,需要人工处理
02 beforeImage 是怎么生成的?
根据业务 SQL 反向查询出被影响的数据, 核心就是生成 beforeSelectSQL, 源码分析todo
03 afterImage 是怎么生成的?
todo
参考
seata官网文档
The text was updated successfully, but these errors were encountered: