EasySQL icon indicating copy to clipboard operation
EasySQL copied to clipboard

feat(sql): 事务支持

Open Ghost-chu opened this issue 2 years ago • 5 comments

功能简述

添加对支持事务的数据库(和数据库引擎)的事务支持。

需求来源

在处理较为复杂的部分数据时,需要保证数据的一致性。

附加内容

有时可能同一个事务下会出现事务嵌套的情况(从代码逻辑来看)。

====== 事务 A 开始 main() ======
... {进行一些A事务的操作} ...


printf("可选:绑定 IP 与 MAC 地址 开始!");
bindIpMac();
====== 事务 B 开始 bindIpMac() ======
... {进行一些B事务的操作} ...
====== 事务 B 结束 bindIpMac() ======
printf("可选:绑定 IP 与 MAC 地址 结束!");

... {进行一些A事务的操作} ...
====== 事务 A 结束 main() ======

Ghost-chu avatar Aug 06 '22 10:08 Ghost-chu

Transactions cannot be nested. This is a consequence of the implicit commit performed for any current transaction when you issue a START TRANSACTION statement or one of its synonyms.

CarmJos avatar Aug 06 '22 10:08 CarmJos

Mysql 是不支持嵌套事务的,开启了一个事务的情况下,再开启一个事务,会隐式的提交上一个事务。所以我们就要在系统架构层面来支持事务的嵌套,常见的做法就是 SAVEPOINT.

CarmJos avatar Aug 06 '22 10:08 CarmJos

参考: https://www.runoob.com/mysql/mysql-transaction.html

CarmJos avatar Aug 06 '22 10:08 CarmJos

催更

huanmeng-qwq avatar Oct 14 '22 18:10 huanmeng-qwq

@huanmeng-qwq 催更

很抱歉,本人困于奔波,暂时没有时间更新该项目。但这几日我会试着进行一次破坏性更新,该更新包含该功能的实现。


另: 我详细的看了您的 SQLibrary 更新,请问您是否愿意贡献一个“SQLMigrator”功能以支持将数据库中已存在的表更新为目标表结构呢?我相信这个功能一定会方便许多开发者!

CarmJos avatar Oct 15 '22 10:10 CarmJos