【问题标题】:Mysql transactions issueMysql事务问题
【发布时间】:2012-06-05 04:37:06
【问题描述】:

在直接的 mysql 脚本中,我会做这样的交易:

START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;

我对事务在 PDO 中的工作方式有点困惑。看起来有 beginTransaction() 和 commit() 方法 - 所以我不确定这些只是简单的 SQL 的便利包装器吗?还是他们在幕后做更多的工作?

换句话说 - 下面的这些例子本质上是一样的吗?

示例 1:

$dbh->exec( 'START TRANSACTION' );
//...do some db work here...
$dbh->exec( "COMMIT" );

示例 2:

$dbh->beginTransaction();
//...do some db work here...
$dbh->commit();

【问题讨论】:

    标签: mysql transactions pdo


    【解决方案1】:

    在功能方面两者是相同的,但 beginTransaction() 和 commit() 是 PDO 函数,可确保与所有数据库兼容,并且可能有一些数据库在 START TRANSACTION 时可能会出错,但 PDO 方法将始终有效。

    【讨论】:

    • Informix 使用 'BEGIN' 或 'BEGIN WORK' 启动事务,并将拒绝 'START TRANSACTION' 作为语法错误。
    • 在我的观察中 $dbh->inTransaction();当事务在 example1 中使用时总是显示 0,而在 example2 中使用时显示 1。很奇怪。
    猜你喜欢
    • 2011-01-07
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 2011-09-20
    • 2010-12-18
    相关资源
    最近更新 更多