数据库的隔离级别、乐观锁与悲观锁

一、数据库的隔离级别

既是:

 

例子:

 二、查看数据库的隔离级别、修改事务的隔离级别

 三、悲观锁与乐观锁(通过隔离级别+代码实现的  不是锁)

 注意:悲观锁与乐观锁是建立在事务的基础之上的

 

 

 

 

1)mysql使用悲观锁

原生的sql语句:
1 开启事务
2 查询的时候加锁---》select * from user where id =1 for update
3 当结束事务锁就被释放
django中的:
1 开始事务
2 在查询的时候 ----》 User.objects.select_for_update().filter(id =1 ).first()
3 可以对数据进行修改,数据永远不会被比如人修改,只有你自己能动
4 当结束事务锁就被释放

2)mysql使用乐观锁(如果使用乐观锁,mysql隔离级别要变成read committed,在django2.0以后,用乐观锁不需要修改隔离级别)

乐观本质不是锁,是通过代码级别实现数据安全
1 开始事务
2 查询的时候不要做任何操作data= User.objects.filter(id =1 ).first()将这个条数据中的age在原来的基础上加1
3 在修改数据的时候。User.objects.filter(id = 1 ,age = data.age).update(age = data.age+1)从而保证在我查询到我修改的这段时候,没有人动过我的数据。
4 如果3中的更新的影响行数为1,说明数据没有被别人改动,只我动,如果3中的影响行数为0,说明该数据已经被别人修改。这时我们想要改数据,就必须重复执行2-3两不,直到3有影响行数。

posted @ 2020-03-17 12:30  薛定谔的猫66  阅读(547)  评论(0)    收藏  举报