Sql MariaDB中条件下的回滚
我有一个交易,它在循环中减少了货币量变量,如果货币量变量低于0,货币量应该返回到交易前的值。在这种情况下,如何在MariaDB中正确使用回滚 ---编辑 我有类似的东西,但它不起作用,请查看Sql MariaDB中条件下的回滚,sql,transactions,mariadb,Sql,Transactions,Mariadb,我有一个交易,它在循环中减少了货币量变量,如果货币量变量低于0,货币量应该返回到交易前的值。在这种情况下,如何在MariaDB中正确使用回滚 ---编辑 我有类似的东西,但它不起作用,请查看if(预算)中的行 也就是说,让回滚撤消自开始以来的所有操作 更多 现在SP已可见 什么是引擎temp?如果它是MyISAM,则不会回滚。显示变量,如“default\u storage\u engine”; 请不要将occ用于两种不同的东西,这会使读者感到困惑 当预算被冻结时,您希望输出成为pracown
if(预算)中的行
也就是说,让回滚
撤消自开始以来的所有操作
更多
现在SP已可见
- 什么是引擎
temp
?如果它是MyISAM,则不会回滚。显示变量,如“default\u storage\u engine”;
- 请不要将
occ
用于两种不同的东西,这会使读者感到困惑
- 当预算被冻结时,您希望输出成为
pracownicy
行的一部分吗?还是不希望有行
- 如果有多个连接执行相同的操作,则会出现严重问题--
temp
对所有连接都可见,并且它们可能相互踩在一起。更改为创建临时表temp…
- 但是,通过预测试(如下),您可以完全避免使用
temp
。首先测试它的需要,然后(如果需要)只需对所有行执行一次选择
- 如果您什么都不想要,那么像这样的简单测试可以预先测试它是否会溢出,从而避免了在循环中进行测试的需要:
也就是说,让回滚
撤消自开始以来的所有操作
更多
现在SP已可见
- 什么是引擎
temp
?如果它是MyISAM,则不会回滚。显示变量,如“default\u storage\u engine”;
- 请不要将
occ
用于两种不同的东西,这会使读者感到困惑
- 当预算被冻结时,您希望输出成为
pracownicy
行的一部分吗?还是不希望有行
- 如果有多个连接执行相同的操作,则会出现严重问题--
temp
对所有连接都可见,并且它们可能相互踩在一起。更改为创建临时表temp…
- 但是,通过预测试(如下),您可以完全避免使用
temp
。首先测试它的需要,然后(如果需要)只需对所有行执行一次选择
- 如果您什么都不想要,那么像这样的简单测试可以预先测试它是否会溢出,从而避免了在循环中进行测试的需要:
我认为,CREATE TABLE
语句导致事务提交。是导致隐式COMMIT
的命令列表
如上述链接所述,您可以将START TRANSACTION
语句移动到DROP
和CREATE
命令之后,或者使用CREATE TEMPORARY TABLE
语法创建临时表:
CREATE TEMPORARY TABLE temp ( Result text );
我认为,CREATE TABLE
语句导致事务提交。是导致隐式COMMIT
的命令列表
如上述链接所述,您可以将START TRANSACTION
语句移动到DROP
和CREATE
命令之后,或者使用CREATE TEMPORARY TABLE
语法创建临时表:
CREATE TEMPORARY TABLE temp ( Result text );
我在改进后发布了我的代码,我认为应该以代码以外的其他方式进行,你能告诉我应该做更多吗?@jakub1998-我在回答中添加了“更多”。我在改进后发布了我的代码,我认为应该以代码以外的其他方式进行,你能告诉我应该做更多吗?@jakub1998-我添加了“更多”对于我的答案,我只是删除了DROP并将其临时添加到表temp中,非常感谢!我只是删除了DROP并将其临时添加到表temp中,非常感谢!
IF ( SELECT SUM(pensja)
FROM pracownicy
where zawod=occupation ) > budget )
CREATE TEMPORARY TABLE temp ( Result text );