代码之家  ›  专栏  ›  技术社区  ›  Polymorphix

MySql中对存储过程的回滚调用

  •  2
  • Polymorphix  · 技术社区  · 16 年前

    我有一个场景,需要在多个数据库中插入、调用和删除一个存储过程。这是在powershell脚本中完成的。如果脚本中的某些情况进一步发生,我希望能够回滚存储过程所做的更改。

    问题是我无法回滚存储过程所做的更改。这个存储过程几乎是6KB,并且进行了大量的更新和插入,所以我想知道对于事务来说是否太多了。在事务中仅执行SP调用时,我可以回滚它。

    任何帮助都将不胜感激。

    $cmd = New-Object MySql.Data.MySqlClient.MySqlCommand('', $mysqlConn)
    $cmd.Transaction = $mysqlConn.BeginTransaction([System.Data.IsolationLevel]'ReadCommitted')
    
    $cmd.CommandText = [IO.File]::ReadAllText($mySqlStoredProcedurePath)
    [Void]$cmd.ExecuteNonQuery()
    
    $cmd.CommandText = "CALL storedProcedureX($startHierarchyId)"
    [Void]$cmd.ExecuteNonQuery()
    
    $cmd.CommandText = "DROP PROCEDURE IF EXISTS storedProcedureX"
    [Void]$cmd.ExecuteNonQuery()
    
    $cmd.Transaction.Rollback()
    
    2 回复  |  直到 16 年前
        1
  •  2
  •   MJB    16 年前

    每次您发出DDL语句(如CREATE PROCEDURE、CREATE TABLE或DROP TABLE)时,Oracle都会执行隐式提交。也许MySQL也这么做了?我会检查它,特别是因为我们现在知道这是解决方案(见上面的时间戳评论)。

        2
  •  0
  •   Polymorphix    16 年前

    Implicit commits

    从MySQL5.0.13开始 过程导致隐式提交。

    推荐文章