连接数据库
直接连接操作
插入数据失败回滚
数据库事务四大属性
原子性
(Atomicity):包含的所有操作要么全部成功,要么全部失败回滚一致性
(Consistency):必须使数据库从一个一致性状态变换到另一个一致性状态隔离性
(Isolation):多个用户并发访问数据库时,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离持久性
(Durability):持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的
事务的隔离级别
- Read uncommitted (读取未提交):其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值
- Read committed(读取已提交):其他事务提交了对数据的修改后,本事务就能读取到修改后的数据值
- Repeatable read(可重复读):无论其他事务是否修改并提交数据,在这个事务中看到的数据值不受其他事务影响
- Serializable(序列化):一个事务一个事务的执行
并发处理
悲观锁
当查询某条记录时,即让数据库为该记录加锁,锁住记录后别人无法操作,使用类似如下语法:
悲观锁类似于我们在多线程资源竞争时添加的互斥锁,容易出现死锁现象,采用不多。
乐观锁(OK!)
乐观锁并不是真实存在的锁,而是在更新的时候判断此时的库存是否是之前查询出的库存,如果相同,表示没人修改,可以更新库存,否则表示别人抢过资源,不再执行库存更新:
任务队列
将下单的逻辑放到任务队列中(如 celery),将并行转为串行,所有人排队下单。比如开启只有一个进程的 Celery,一个订单一个订单的处理。
评论区