网站怎么做移动图片,东莞app,wordpress头像缓存到本地,成都著名网站1.Mysql的锁有哪些种类
全局锁#xff0c; 通过flush tables with read lock 应用场景是全局备份#xff0c;备份的时候如果有两个表#xff0c;备份 先备份了用户表#xff0c;然后用户了商品#xff0c;再备份商品表 那么商品表库存减少了#xff0c;然而用户表的育儿…1.Mysql的锁有哪些种类
全局锁 通过flush tables with read lock 应用场景是全局备份备份的时候如果有两个表备份 先备份了用户表然后用户了商品再备份商品表 那么商品表库存减少了然而用户表的育儿没有减少 但是再可重复读的事务隔离级别可以用mVCC快照机制解决表级锁 表锁 当一个事务锁上表锁之后它就只能访问自己锁上这个锁的表 元数据锁 就是锁上表的元数据出现一个问题就是当出现长事务的时候这个时候他先select了这个时候获取的是元数据的读锁然后当另一个事务修改这个元数据的时候那么就会获得元数据写锁但是还未获取会阻塞申请元数据锁的事务会形成一个队列所以后续申请元数据读锁也就是一个select语句都会阻塞 意向锁 意向锁是一个表锁用作于这个快速检查表中是否有这个行级别锁也就是说当我进行加入共享锁或者是独占锁的时候对行我就会对表加入一个意向独占锁或者是意向共享锁这样在后续增加表锁的时候就会冲突不需要遍历所有的表就可以进行找到数据库的锁情况。然后意向锁和意向锁之间是不会冲突的所以行级锁还是按照之前的规矩增加 auto_inc锁 用于这个自增数据加锁目的就是为了确保自增锁的id唯一不存在这个并发问题。一般来说inc锁是事务级别的也就是事务提交之后才会对自增锁释放 auto_inc锁不是事务级别的而是语句级别的当插入语句结束之后就释放锁然后在新的版本中auto_inc锁更加轻量化了变成了只要对字段赋值之后就会释放锁 问题对于insert selcect语句来说如果加入的是轻量级的说那么并发事务的事务就会出现问题然后备份binlog的时候会只会备份语句在进行同步的时候会顺序执行这样就会出现主从数据不一致的情况所以我们这种情况可以设置binlog的format格式就是row的形式
行级锁
record记录锁 通过select * form table where xxx for update 然后之后就是分为共享锁和独占锁共享锁和共享锁可以共存但是共享锁和独占锁不能够并存独占锁和独占锁也不能共存gap锁 gap可以用来避免幻读gap锁可以共存next-key锁 就是一个gap锁加上一个记录锁插入意向锁 当某个事务要对某个点插入的时候就会出现一个什么情况呢 如果这个时候有gap锁的时候就会生成插入意向锁进行等待然后另外同样插入的时候增加到一个插入意向锁然而因为唯一性约束第二个插入就不会成功
Mysql锁的具体锁插入过程
哪些sql语句会加锁 updata语句和 delete语句会加上X锁以及select 方法for update会加X锁什么时候mysql会加入锁 首先是select * xxx for update的时候不是mysql的快照读而是当前读这个时候会加锁进行读取 加锁的全部的单位都是next_key锁然后这个锁的目的主要是防止幻读的所以当有些时候不需要加锁也可以避免幻读的话那么这个锁会退化 首先是分类 唯一索引等值查询查到了只会加一个记录锁没查到那么就加间隙锁
唯一索引范围查询 小于 就加上间隙锁加上之前左右的记录锁以及间隙锁 小于等于如果查到了就加上这个值得记录锁没查到就仍然是这个间隙锁 大于就是间隙锁加上右边所有的记录锁和间隙锁 大于等于就是查到了就加上这个得记录锁没查到就是只有当前间隙锁和后面所有间隙锁和记录锁
非唯一索引等值查询 首先是查到了就会锁当前主键记录说同时会根据锁住前后的间隙锁这个时候就看前后有没有间隙锁来决定能不能插入与该值相等的 然后是没查到就会加一个间隙锁
非唯一索引范围查询 小于 就会加上间隙锁以及左边所有的记录锁以及间隙锁 小于等于如果查到会加上该值的记录锁该值后面的间隙锁以及该值前面所有的记录锁以及间隙锁 如果没有等于的值也是加上间隙锁以及左边所有数据的记录锁以及间隙锁 大于 就会加上间隙锁以及右边所有记录的记录锁以及间隙锁 大于等于也是查到了就记录锁该记录左边一个间隙锁当前记录锁以及后面所有的记录锁以及间隙锁 没查到就是一个间隙锁以及后面所有的间隙锁以及记录锁
没有索引的情况 就是会扫描全表对全表锁起来所以进行update操作的时候一定要加上索引要不然一个update就会把所有的数据加上锁
什么时候会造成死锁 比如第一个select 等值查询 某一个值 然后他没查到就会将间隙锁锁起来
然后同时第二个selcect也查同样差不多范围的值的时候也会有一个间隙锁
当第一个事务第二条语句是要插入到该间隙里面的时候