MYSQL锁

1.锁的定义

我们在操作数据库的时候,可能会由于并发问题而引起数据的不一致(数据冲突),锁的冲突也是影响数据库并发访问性能的一个重要因素,锁对于数据库而言就显得尤其重要
MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。
比如:
MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);
innoDB存储引擎即支持行级锁(row-level locking),也支持表级锁,默认情况下是采用行级锁

表级锁:
开销小,加锁快;不会出现死锁(因为MyISAM会一次性获得SQL所需的全部锁);锁定力度大,发生锁冲突的概率最高,并发度最低。
应用场景:并发性不高,以查询为主,少量更新的应用,比如小型的web应用
行级锁:
开销大,加锁慢;会出现死锁;锁定力度最小,发生锁冲突的概率最低,并发度也最高。
应用场景:适用于高并发环境下,对事务完整性要求较高的系统,如在线事务处理系统
页锁:
开销和加锁速度介于表锁和行锁之间;会出现死锁;锁定力度介于表锁和行锁之间,并发度一般

其他
悲观锁和乐观锁
悲观锁
就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都 会上锁
乐观锁
就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁
共享锁
共享锁指的就是对于多个不同的事务,对同一个资源共享同一个锁。相当于对于同一扇门,它拥有多个钥
匙一样,共享锁在mysql中是通过 什么命令来调用呢。在执行语句后面加上lock in share mode就代表对某些资源加上共享锁了。

2.MYISAM引擎

表锁有两种模式:表共享锁(Table Read Lock) 和表独占写锁(Table Write Lock).
1.对MyISAM的读操作,不会阻塞其他用户对同一表请求,但会阻塞对同一表的写请求;
2.对MyISAM的写操作,则会阻塞其他用户对同一表的读和写操作;
3.MyISAM表的读操作和写操作之间,以及写操作之间是串行的。

当一个线程获得对一个表的写锁后,只有持有锁线程可以对表进行更新操作。其他线程的读、写操作都会等待,直到锁被释放为止。

3.INNODB引擎

innoDB的行锁模式及加锁方法
innoDB有两种类型的行锁
1.共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集得排他锁。
2.排他锁(X):允许获取排他锁得事务更新数据,阻止其他事务取得相同得数据集共享读锁和排他写锁。

另外,为了允许行锁和表锁共存,实现多颗粒度锁机制,InnoDB还有两种内部使用的意向锁(Intention Locks),这两种意向锁都是表锁
1.意向共享锁(IS):事务打算给数据行共享锁,事务在给一个数据行加共享锁必须先取得该表的IS锁。
2.意向排他锁(IX):事务打算给数据行加排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值