什么交易在MySQL?

时间:2010-12-23 13:39:45

标签: mysql database transactions

我还没有得到MySQL中的交易?它有什么好处,我该如何申请?

请简单解释,但不是那么简单。我知道DB是什么..

8 个答案:

答案 0 :(得分:6)

当你有几个相关的SQL语句必须要么作为一个单独的工作单元成功或失败时,事务会有所帮助。

典型的例子是两个银行账户之间的资金转移。你不希望撤回成功,存款失败;除非退出,否则您的银行不希望存款成功。

事务监视事务中执行的所有SQL,以确保所有成功。如果有任何失败,它会回滚所有陈述。

答案 1 :(得分:4)

事务是一组在您运行commit命令之前未进行编译(换句话说,已保存)的更改。因此,事务允许您说“我想对数据库进行所有这些更改,但实际上不会保存我的更改,直到整个列表完成。”如果在此过程中出现问题,您可以回滚(换句话说,撤消)您在制作过程中所做的任何更改。

答案 2 :(得分:3)

事务(不仅在MySQL中)是执行某些代码的方式。但是,如果出现问题,交易将被撤销,如果整个过程没有完成,则不会进行任何更改。

示例:

Transaction begins:
doA();
doB();
doC();
Transaction ends:
doD();

如果A失败,则没有任何改变 如果B失败,没有任何改变 如果C失败,则没有任何改变 如果D失败,A,B,C仍然执行。

如果事务中的某些内容失败,则会执行所谓的回滚,从而撤消所做的所有更改。

答案 3 :(得分:2)

事务不仅限于MySql - 大多数RDBMS都使用它们。

当你做几个相关的操作并且需要它们以原子方式行事时,它们很有用 - 也就是说,要么全部都发生了,要么都没有。

例如 - 您要保存订单和所有OrderItem。这最好在交易中完成,因为没有另一个交易并没有多大意义。

wikipedia文章非常有用。

  

交易提供了“全有或全无”的主张,声明在数据库中执行的每个工作单元必须完整或完全没有效果。此外,系统必须将每个事务与其他事务隔离,结果必须符合数据库中的现有约束,并且成功完成的事务必须写入持久存储。

答案 4 :(得分:1)

wikipedia页面做到了这一点。但是,基本上,事务允许您将语句作为一个操作单独执行。它还允许您撤消错误。 即。

START TRANSACTION;
DELETE FROM foo WHERE bar = baz;
ROLLBACK;

没有变化。

交易也是孤立的。这意味着第一个语句看到的视图与最后一个视图相同。如果我们这样做

SELECT * FROM foo;
SELECT * FROM foo;

在交易之外,如果有人在此期间更改了表格,结果将会有所不同。但是在事务中,两者都产生相同的结果 - 事务开始时表的视图。

答案 5 :(得分:1)

  

我仍然没有得到MySQL的交易?

BEGIN TRANSACTION

INSERT
INTO    mytable
VALUES  (1)

INSERT
INTO    mytable
VALUES  (2)

COMMIT

因此,你要么在表中得到两个值(1和2),要么得不到。

一个值不可能到达而另一个值不存在。

答案 6 :(得分:0)

以下是一些信息:

http://en.wikipedia.org/wiki/Database_transaction

基本上,(数据库)事务是一种对更新语句进行分组的方法。如果一个语句出现问题,您可以“撤消”(回滚)所有语句,因此数据库中的信息仍然“正确”。

一个简单的例子就是将一个人及其地址插入数据库。如果您首先插入地址然后插入此人,并且人员信息中存在错误,则您不希望该地址位于数据库中而没有其地址的人。如果您使用了交易,则可以立即撤消所有操作。

我希望这有一定道理:)

答案 7 :(得分:0)

在数据库上执行插入或更新时,更新/插入会立即生效。当您有一个事务表时,更新/插入将排队,直到您排队了所有需要执行的操作。此时,您告诉MySQL同时提交所有更改。现在的好处是,如果任何行动失败,则不会生效。