所以我找到了这个示例代码并计划为我的一个项目做类似的事情,但有一个问题困扰着我
try {
// First of all, let's begin a transaction
$db->beginTransaction();
// A set of queries; if one fails, an exception should be thrown
$db->query('first query');
$db->query('second query');
$db->query('third query');
// If we arrive here, it means that no exception was thrown
// i.e. no query has failed, and we can commit the transaction
$db->commit();
} catch (Exception $e) {
// An exception has been thrown
// We must rollback the transaction
$db->rollback();
}
前端使用一个 mysql 用户(假设“webaccess-admin”“密码”)连接到数据库,那么如果两个人同时运行代码,并且其中一个人失败,会发生什么情况? php 脚本的一个实例执行中的错误是否会导致该脚本的另一个实例的 sql 查询也回滚?我必须使用命名事务或其他什么吗?或者单独的mysql用户?
这是我正在谈论的一个例子:
person1 -> 开始交易
person2 -> 开始交易
//两个用户执行的sql代码
person1 -> 提交
person1 [!错误]
person2 -> 仍在运行查询(或者现在可能已经提交)
person1 将触发回滚,person2 运行的查询会发生什么情况?
事务应该是原子的,也就是说,任何给定的进程都将看到事务的全部内容,或者看不到任何事务。那么,在您的示例中,person1 的事务中的错误不会出现在 person2 上,回滚也不会影响 person2 的操作。
不过,也有一些注意事项。例如,仅对非混合表类型以及表引擎支持的情况保证原子性。完整的详细信息可在MySQL站点 http://dev.mysql.com/doc/refman/5.6/en/commit.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)