Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql MariaDB中条件下的回滚_Sql_Transactions_Mariadb - Fatal编程技术网

Sql MariaDB中条件下的回滚

Sql MariaDB中条件下的回滚,sql,transactions,mariadb,Sql,Transactions,Mariadb,我有一个交易,它在循环中减少了货币量变量,如果货币量变量低于0,货币量应该返回到交易前的值。在这种情况下,如何在MariaDB中正确使用回滚 ---编辑 我有类似的东西,但它不起作用,请查看if(预算)中的行 也就是说,让回滚撤消自开始以来的所有操作 更多 现在SP已可见 什么是引擎temp?如果它是MyISAM,则不会回滚。显示变量,如“default\u storage\u engine”; 请不要将occ用于两种不同的东西,这会使读者感到困惑 当预算被冻结时,您希望输出成为pracown

我有一个交易,它在循环中减少了货币量变量,如果货币量变量低于0,货币量应该返回到交易前的值。在这种情况下,如何在MariaDB中正确使用回滚

---编辑

我有类似的东西,但它不起作用,请查看
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 );