【问题标题】:Wanted [ Example of SQL transactions ] [closed]想要[SQL事务示例] [关闭]
【发布时间】:2013-05-21 19:09:31
【问题描述】:

我对 SQL 还很陌生。目前,我正在尝试了解交易,但我迷路了。所以我希望你能给我展示几个 SQL 事务的例子。

我认为我认为交易通常是使用 DBM 软件实现的,然后根据我在用户界面中所做的工作将它们构建在一起。

那么,例如,如果我想删除多行,事务会是什么样子? 会不会是这样的:

  1. 保存点 sp1;
  2. 从客户中删除 其中 fname = “James” AND lname = “Belik
  3. 提交;
  4. 保存点 sp2;
  5. 从客户中删除 其中 fname = “James” AND lname = “Belik;
  6. 提交;

如果不是,那会怎样?还有 SET TRANSACTION 去哪里了?

非常感谢任何帮助,谢谢。

【问题讨论】:

    标签: mysql sql ms-access transactions


    【解决方案1】:

    您已针对 SQL(通用)、MySQL 和 Access 标记了您的问题,并且 SQL 的每种“风格”都可能有其自己的特定语法(查看相关文档,例如,对于 MySQL,请查看 here)。然而,一个通用的例子是

    START TRANSACTION;
    UPDATE BankAccount SET Balance=Balance-5 WHERE Owner='James';
    UPDATE BankAccount SET Balance=Balance+5 WHERE Owner='Gord';
    COMMIT;
    

    如果第二个 UPDATE 语句失败,则整个事务将“回滚”并且两个帐户余额保持不变。只有当 两个 UPDATES 都成功时,这 5 美元才会从您的帐户转移到我的帐户。

    【讨论】:

    • 谢谢,这太完美了。
    【解决方案2】:

    当您希望整个系列的 SQL 语句成功时使用事务。如果该系列的任何部分失败,则数据库将回滚到 BEGIN TRANSACTION 之前的状态。您将整个 SQL 语句序列包装在一个事务中。

    通常的例子是银行账户之间的转账。为此,我必须从一个帐户中借记一个金额,并在另一个帐户中贷记相同的金额。两个操作都必须成功,因为如果只有一个成功,那么传输将不平衡。例如,如果贷记成功但借记失败,则有人得到了免费的钱。

    【讨论】:

    • 我理解这个理论。我只想查看围绕查询的事务控制命令的布局:/ 无论如何,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    相关资源
    最近更新 更多