数据库的锁
两大类:乐观锁,悲观锁.
用处:保障数据安全,处理高并发问题
第一种:乐观锁是靠CAS算法中包含三个参数(V,E,N),V表示要更新的变量(也就是从主存中拷贝过来的值)、E表示预期的值、N表示新值。
如果E与V值相等,就传入N值. CAS容易有ABA问题.ABA问题是一个线程把A改成了B,另外个线程把B又改成了A,导致修改重复,
例子:把火锅会员费小于100的,都加上100,改完的时候,那个人消费了100,又给他加了100
第二种:通过判断版本号version是否修改.来判断------->只在提交更新的时候才判断
总认为别人不会被修改
悲观锁:总认为别人会修改
oracle没有页级锁
行级锁:排它锁,共享锁,更新锁,意向锁
排它锁:(写锁)(独占锁): A更新操作时在操作时不予许别人对这条数据读和写.
共享锁(读锁): A加上读锁时,其他事务只能加读锁,select语句;读取后立即解除共享锁
读的时候,不予许被修改
更新锁:当一个事务执行update时,数据库会先给事务配个更新锁,当执行更新操作时,自动把更新锁升级为独占锁,写锁
oracle中使用的就是这个锁,能读不能写,
意向锁:快速判断哪些资源被所定
表锁:>>>>>
oracle:
行级锁 : 一般用的是更新锁
表级锁 : 一般是表结构共享锁,不可对表进行DDL操作 ,行级锁要先加上表级锁