0

我有一个发布到 php 的表单。作为帖子的一部分,我需要将数据插入到 2 个不同的表中。现在我只做一个插入,然后是第二个插入。

你可能已经知道我接下来要问什么了 :)

我需要能够确保两个插入都发生。如果第二个没有发生,我需要第一个不发生或回滚。

我的理解是,如果 mysql 使用 innodb,这是可能的,这是 mysql 5.5 及更高版本的默认设置,但我使用的是 mysql 5.3,这是 centos 的最新版本。不知道我怎么知道,如果打开了innodb,我该如何编写查询?然后当然我可能不得不假设任何可能使用我的程序的人可能没有正确版本的 mysql 和 innodb。

谢谢

4

2 回答 2

1

创建表时,您可以指定它应该运行的引擎。为了能够在 InnoDB 中使用它需要的事务。那部分在表 optionsCREATE TABLE的末尾。如果您的表还不是 InnoDB,您可以使用.ALTER TABLE

可以从 php 将 auto_commit 设置为 false,这就是您想要做的。然后你所做的一切都将在一个事务中,直到你进行提交或回滚。

另一种选择是手动发送START TRANSACTION,COMMITROLLBACK. php 手册中有一个示例。

于 2013-04-04T20:55:49.950 回答
0
START TRANSACTION

if(first insert failed)
{
    ROLLBACK
}
else if(second insert failed)
{
    ROLLBACK
}
else
{
    COMMIT
}
于 2013-04-04T20:41:00.590 回答