• 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.什么是死锁?乐观锁?悲观锁?

  • 相关阅读:
    ⑬linux基础命令 wget
    爱情的诗·21~25节
    爱情的诗·16~20节
    爱情的诗·11~15节
    人生的诗·406~410节
    唐诗宋词学习·126~130节
    爱情的诗·6~10节
    人生的诗·401~405节
    唐诗宋词学习·121~125节
    唐诗宋词学习·100~105节
  • 原文地址:https://www.cnblogs.com/dotdog/p/4470799.html
Copyright © 2020-2023  润新知