我还没有得到MySQL中的交易?它有什么好处,我该如何申请?
请简单解释,但不是那么简单。我知道DB是什么..
答案 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同时提交所有更改。现在的好处是,如果任何行动失败,则不会生效。