数据库锁的分类 各种锁

数据库中的锁

前言

C++支持并发有锁,Linux里面也有锁机制,数据库也有锁,什么互斥锁,表级锁,间隙锁,好多…,本文以循序渐进的方式,学习数据库中的锁…

分享链接

讲的比较不容易懂,但是分类清晰。
数据库锁的一个分类

数据库的锁,视频讲解,不是很全,用来理解挺好
b站视频讲解
在这里插入图片描述
小林code讲解的:讲解的易懂,循序渐进。小林code讲解
在这里插入图片描述

个人总结

全局锁:

所有数据只读,应用于做全库逻辑备份

表级锁

表锁:对整个表锁,有共享和排他表锁
元数据锁MDL:不需要显示的使用 MDL,因为当我们对数据库表进行操作时,会自动给这个表加上 MDL:对一张表进行 CRUD 操作时,加的是 MDL 读锁;对一张表做结构变更操作的时候,加的是 MDL 写锁,MDL 是为了保证当用户对表执行 CRUD 操作时,防止其他线程对这个表结构做了变更
意向锁:
在使用 InnoDB 引擎的表里对某些记录加上「共享锁」之前,需要先在表级别加上一个「意向共享锁」
在使用 InnoDB 引擎的表里对某些纪录加上「独占锁」之前,需要先在表级别加上一个「意向独占锁」
意向共享锁和意向独占锁是表级锁,不会和行级的共享锁和独占锁发生冲突,而且意向锁之间也不会发生冲突,只会和共享表锁(lock tables … read)和独占表锁(lock tables … write)发生冲突
如果没有「意向锁」,那么加「独占表锁」时,就需要遍历表里所有记录,查看是否有记录存在独占锁,这样效率会很慢。
那么有了「意向锁」,由于在对记录加独占锁前,先会加上表级别的意向独占锁,那么在加「独占表锁」时,直接查该表是否有意向独占锁,如果有就意味着表里已经有记录被加了独占锁,这样就不用去遍历表里的记录
意向锁的目的是为了快速判断表里是否有记录被加锁
AUTO-INC 锁:这是通过对主键字段声明 AUTO_INCREMENT 属性实现的。为了正确递增

行级锁:

record lock :就锁一行 分共享和排他
gap lock:Gap Lock 称为间隙锁,只存在于可重复读隔离级别,目的是为了解决可重复读隔离级别下幻读的现象,间隙锁虽然存在 X 型间隙锁和 S 型间隙锁,但是并没有什么区别
Next-Key Lock :称为临键锁,是 Record Lock + Gap Lock 的组合,锁定一个范围,并且锁定记录本身,next-key lock 是包含间隙锁+记录锁的,如果一个事务获取了 X 型的 next-key lock,那么另外一个事务在获取相同范围的 X 型的 next-key lock 时,是会被阻塞的
插入意向锁:一个事务在插入一条记录的时候,需要判断插入位置是否已被其他事务加了间隙锁(next-key lock 也包含间隙锁),如果有,发生阻塞,直到拥有间隙锁的那个事务提交为止(释放间隙锁的时刻),在此期间会生成一个插入意向锁。

SQL语句

在这里插入图片描述
修改表结构:
更改表,添加字段

alter table user_ add id varchar(10);

修改字段类型

alter table user_ modify id varchar(20);

修改字段名和字段类型

alter table user_ change id id_no varchar(30);

删除字段

alter table user_ drop id;

修改表民

alter table user_ rename to user_tab; 

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值