提交和启动事务有什么作用?

时间:2014-12-19 16:20:53

标签: symfony doctrine

在数据库查询中查找symfony2时,我有18个查询。 (我认为这很多)我只更新了一条记录。

反正。我还看到一些查询被命名为“ COMMIT ”和“ START TRANSACTION ”。哪个不太清楚它的作用。任何人都可以向我解释一下吗?感谢。

这里是我对Symfony2的一个例子

SYMFONY2

2 个答案:

答案 0 :(得分:3)

Jovan的链接是一个更好的阅读,但在外行的条件下, START TRANSACION COMMIT 之间的所有查询都被视为一个整体;意思是,如果其中一个查询失败,那么他们都会回滚'并失败。 START TRANSACTION 只是表示分组的开始, COMMIT 完成它。当您在逻辑上需要发生所有查询时使用它。

比如说你想插入一个新员工,他们来设置一些权限。您需要插入用户表,然后插入 user_roles 表。

现在,假设您使用上述内容,并尝试运行以下两个插入内容:

INSERT INTO user (...);
INSERT INTO user_roles (...);

如果第一个查询有效,但第二个查询没有?您将拥有一个没有任何权限的“悬空”用户,他们将坐在数据库中。

如果你改为使用如下所示的交易,你可以确保所有查询都有效,或者都不起作用。

START TRANSACTION;
INSERT INTO user (...);
INSERT INTO user_roles (...);
COMMIT;

答案 1 :(得分:1)

因为数据库事务是非常严肃的主题,而不是我在这里非常简短地解释它,我认为阅读这篇wiki文章会更有益:

<强> Wikipedia: Database Transactions