【问题标题】:Transactions MySql and php事务 MySql 和 php
【发布时间】:2012-10-28 13:43:15
【问题描述】:

我对通过 php 脚本运行事务感到困惑。 在我的 MySql 中自动提交设置为 1, 然而当我运行一个脚本时

例如:mysql_query("开始交易");

$sql="INSERT INTO 
`address`(`Address_Id`, 
`Address_Line1`, 
`Address_line2`, 
`Zip`, 
`Created_By`,
 `Created_Date`, 
 `Updated_By`, 
 `Updated_Date`) 
VALUES ('2','this is test1','test2','210','SYSTEM','NOW()','SYSTEM','NOW()')";

mysql_query($sql);

当我不提交时,表中插入的记录为零。 只有当我发出提交命令时才会出现记录。

另外请告诉我,如果我在 php 脚本中启动事务然后不给出回滚或提交语句会发生什么

【问题讨论】:

  • 你使用的是 InnoDB 还是 MyISAM 存储引擎?

标签: php mysql transactions


【解决方案1】:

http://dev.mysql.com/doc/refman/5.5/en/commit.html:

默认情况下,MySQL 在启用自动提交模式的情况下运行。这意味着,一旦您执行更新(修改)表的语句,MySQL 就会将更新存储在磁盘上以使其永久化。

但是,如果您明确指定 START TRANSACTION - 则不会将其考虑在内,因此您在应该提交的事务中工作。

【讨论】:

  • 如果我没有提交或回滚,如果在给出 START TRANSACTION 之后会发生什么...
  • @VYSHNAVI:如果事务没有提交 - 那么它就会回滚
【解决方案2】:

试着这样做。

mysql_query("BEGIN");

        $query="";
        $result=mysql_query($query);

        if($result==0)
        {
            mysql_query("ROLLBACK");
           echo $error_message;
          // mysql_query($query_setId);
           die();
        }

    mysql_query("COMMIT");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    相关资源
    最近更新 更多