zoukankan      html  css  js  c++  java
  • MariaDB SQL 管理事物处理

    表单


    1. customers表:客户。
    2. orders表:客户的订单。
    3. orderitems:存储订单订购的各种物品。

    情景(没有使用事务)


    1. 检查客户是否在数据库(即在customers表中)。如果没有,添加该客户。
    2. 检索客户id。
    3. 添加一行到orders表中。将它关联到客户ID。
    4. 检索orders表中新订单的ID。
    5. 对每个订购的物品,添加一行到orderitems表中,通过检索到的ID将其关联到orders表。

    问题


    假设产生了一些数据库故障或者其他原因导致数据库故障,让这个完整的步骤无法完成。

    故障发生在:

    1. 客户添加之后,并且在表单添加之前。这样的情况是允许出现的,因为客户没有订单是合法的。
    2. orders行添加之后,且在添加orderitems行之前。数据库将有一个空的订单。
    3. 添加orderitems行的时候。数据库将产生一个不完整的订单。

     

    什么是数据库事务?


     

    1. 数据库事务:一个有限的数据库操作序列构成。(维基百科)
    2. 事务(Transaction)——一组SQL语句。(《MariaDB SQL》)
    3. 事务处理(Transaction processing):管理数据库操作集合的一种机制,它保证批处理完成,以保证数据库永远不会包含部分操作的结果,即要么全部都执行,要么完全不执行。(《MariaDB SQL》)

     

    如何处理?(使用事务)


    1. 检查客户是否在数据库中。如果没有,添加该客户。
    2. 提交客户信息。
    3. 检索客户ID。
    4. 添加一行到orders表中。
    5. 如果添加行到orders表时发生故障,则回滚(roll back)。
    6. 检索orders表中新订单的ID。
    7. 对每个订购的物品,添加一行到orderitems表中。
    8. 如果在添加行到orderitems时发生错误,回滚所有已添加的ordertimes行和orders行。
    9. 提交订单信息

     

    其他概念


    • 回滚(Rollback):撤销指定SQL语句的处理过程。
    • 提交(Commit):将还未保存的数据库语句写入数据库表。
    • 保存点(Savepoint):事务集中的一个临时占位符,可进行回滚。

     

    部分代码:

    SELECT * FROM ordertotals;
    START TRANSACTION;
    DELETE FROM ordertotales;
    SELECT * FROM ordertotales;
    ROLLBACK;
    SELECT * FROM ordertotals;

     

    SAVEPOINT delete1;
    ROLLBACK TO delete1;

     

    设置MariaDB不能自动提交:

    SET autocommit=0;

     

    待续的更主要的主题


    1.数据库最重要的核心是什么?

    2.数据库完整性

    3.数据库事务拥有四个特性,习惯上被称之为ACID特性

    4.什么是死锁?乐观锁?悲观锁?

  • 相关阅读:
    LeetCode 811. Subdomain Visit Count (子域名访问计数)
    LeetCode 884. Uncommon Words from Two Sentences (两句话中的不常见单词)
    LeetCode 939. Minimum Area Rectangle (最小面积矩形)
    LeetCode 781. Rabbits in Forest (森林中的兔子)
    LeetCode 739. Daily Temperatures (每日温度)
    三种方式实现按钮的点击事件
    239. Sliding Window Maximum
    14.TCP的坚持定时器和保活定时器
    13.TCP的超时与重传
    12.TCP的成块数据流
  • 原文地址:https://www.cnblogs.com/dotdog/p/4470799.html
Copyright © 2011-2022 走看看