Mysql锁

Mysql锁

  1. 表锁
    1. Myisam、innodb支持表锁
    2. 锁的类型
      1. 读锁
        1. 语法:lock table 表名 read[,表名2 read];
        2. 特性:
          1. 当链接A给table加了读锁之后,该链接只可以读table表,如果读取其他表的数据,会报错,如果想要读取需要给要读取的表通通加上读锁才可以,链接A不可以对表进行写入操作;
          2. 链接B只可以对加了读锁的表进行读操作,如果执行写入操作,会等待,直到链接A释放读锁
      2. 写锁
        1. 语法:lock table 表名 write;
        2. 特性:
          1. 链接A给table加了写锁,那么他只可以操作table表,如果想要操作其他表,需要给其他表也加锁才可以,链接A可以对table进行读写的操作
          2. 链接B无论对table执行读还是写都需要链接A释放锁之后才会执行,否则等待
  2. 行锁
    1. innodb支持行锁
    2. 锁的类型
      1. 共享锁(乐观锁)
        1. 语法:select * from 表名 where id=1 lock in share mode;
        2. 特性:
          1. 链接A对数据1增加了共享锁之后,该链接可以对该数据执行任何操作
          2. 链接B可以同时获取该数据1的共享锁,并且可以对该数据进行读取操作,但是当执行删除或者修改数据1的时候,会等待,只有拥有当前数据1的共享锁的链接才可以对该数据执行写入操作
          3. 当数据1被加了共享锁之后,会阻止其他链接对数据1进增加排他锁
      2. 排他锁(悲观锁)
        1. 语法:select * from 表名 where id=1 for update;
        2. 特性:
          1. 链接A对数据1增加了排他锁,该链接可以对其执行任何操作
          2. 其他链接只可以对该数据执行读操作,无法进行写操作,需要等待锁释放
          3. 当数据1被加了排他锁之后,会阻止其他链接对数据1增加共享锁和排他锁
  3. 在开发中使用锁也需要关闭自动提交,或者在事务内执行
  4. 应用场景:
      1. 高并发
      2. 避免对数据表的同时操作,产生数据覆盖
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值