mysql习题3

当程序出现并发的情况时,为了保证数据安全,则需要一些手段来维持

1.行级锁

每次锁定的是一行数据的锁,它是由其他储存引擎实现的(非mysql)

  • 优点:锁粒度小,争用率低,并发高
  • 缺点:开销大,加锁慢,容易死锁

两种类型:共享锁排他锁

使用行级锁定的主要是InnoDB

锁定机制的实现过程中为了让行级锁定和表级锁定共存,而有了意向共享锁意向排他锁,如果自己需要一个共享锁,那么就在表上面添加一个意向共享锁,如果自己需要一个排他锁,那么就在表上面添加一个意向排他锁

  • 意向共享锁可以同时并存多个,但是意向排他锁同时只能有一个存在

InnoDB行锁是给索引上的索引项加锁.注意事项:

  • 如果不通过索引条件检索数据时,InnoDB将使用表锁
  • 行锁是针对索引来加的锁,而不是记录,所以在访问不同行的记录时,如果使用了相同的索引键,还是会出现锁冲突的。
  • 在一些很小的表,mysql为了使效率更高而不会使用索引,这种情况下InnoDB将使用表锁

2.表级锁

每次锁定的是一张表的锁

  • 优点:开销小,速度快,表级锁一次会将整个表锁定,能较好的避免死锁问题
  • 缺点:锁粒度最大,并发低

两种类型:表共享读锁表独占写锁

使用表级锁定的主要有MyISAM,MEMORY,CSV等一些非事务性存储引擎

  • 读操作不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写操作
  • 写操作会阻塞其他用户对同一表的读和写操作

查看表级锁的争用情况:show status like ‘table%’;

3.乐观锁

只在数据进行更新时才会进行冲突检测,如果发现冲突则返回信息给用户

  • 乐观锁一般实现方式是记录数据版本
  • 它假设发生冲突的可能性小,只在提交的时候才去锁定
  • 优点:可大大避免数据库幻读,业务处理时间过长等原因引起数据处理错误
  • 缺点:更新失败的概率会比较高,容易发生业务失败

4.悲观锁

在修改数据之前先锁定,再修改

  • 它假设发生冲突的可能性大,所以需要在修改之前先加锁
  • 依靠数据库提供的锁机制
  • 优点:据处理的更安全
  • 缺点:效率较差,增加了锁死的机会

两种分类:共享锁排他锁

  • 共享锁又称读锁,可以多用户共享一把锁
  • 排他锁又称写锁,不能与其他锁共存

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值