事务
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. 读取未提交:其他事务只要修改了数据,即使未提交,本事务也能修改后看到数据值
案例
以商城下单操作为例:
当一个订单中购买多个商品时,如果某个商品库存不足,购买失败,但是其它的数据已经存在于表中,这是一个错误的结果