Django 中事务的处理

事务

  • ACID 保证数据的正确有效,一个操作有误,其他相关的操作都放弃

  • 问题:

    • 当一个订单中购买多个商品时,如果某个商品库存不足,购买失败,但是其它的数据已经存在于表中,这是一个错误的结果
  • 解决:

    • 事务:当执行 insert、update、delete 语句时,会改变数据库中的数据,为了保证操作的正确性、一致性,需要使用 事务
    • 事务的功能是由 mysql 提供的
  • 实现:

    • 禁止自动提交:with transaction.atomic():
  • django 中操作数据库 均是对 模型类进行CRUD 操作

    功能 mysql命令 django命令
    开启事务 begin sid = transaction.savapoint()
    提交事务 commit transaction.savepoint_commit(sid)
    回滚事务 rollbok tramsaction_savepoint_rollback(sid)

    django 中使用事务:https://yiyibooks.cn/xx/Django_1.11.6/topics/db/transactions.html

  • 事务隔离级别
    1. 串行化:排队,执行效率慢
    2. 可重复读,看到的数据始终是旧的数据
    3. 读取已提交: 一个事务已提交数据变更,本事务可以看到其他事务修改后的数据
    4. 读取未提交:其他事务只要修改了数据,即使未提交,本事务也能修改后看到数据值

案例

以商城下单操作为例:
当一个订单中购买多个商品时,如果某个商品库存不足,购买失败,但是其它的数据已经存在于表中,这是一个错误的结果

提交订单-事务操作逻辑及代码实现.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容