Mysql并发控制(锁的使用)

表锁

建表
CREATE TABLEmylock(idINT (11) NOT NULL AUTO_INCREMENT,NAMEVARCHAR (20) DEFAULT NULL, PRIMARY KEY (id`)
);

INSERT INTO mylock (id,NAME) VALUES (1, ‘a’);
INSERT INTO mylock (id,NAME) VALUES (2, ‘b’);
INSERT INTO mylock (id,NAME) VALUES (3, ‘c’);
INSERT INTO mylock (id,NAME) VALUES (4, ‘d’);`

  1. read锁

    session1
    lock TABLE mylock READ 给表加读锁 (1)
    select * from mylock 查询表数据,正常 (2)
    update mylock set name = ‘e’ where id = 1 无法进行操作 (4)
    UNLOCK TABLES 释放锁 (6)
    update mylock set name = ‘e’ where id = 1 无法进行操作 (7)正常更新

    session2
    select * from mylock 查询表数据,正常 (3)
    update mylock set name = ‘e’ where id = 1 无法进行操作 (5)
    update mylock set name = ‘e’ where id = 1 正常更新(8)

  2. write锁

session1
lock TABLE mylock WRITE 给表加写锁 (1)
select * from mylock where id = 1 查询正常操作 (2)
update mylock set name = ‘f’ where id = 1 更新正常操作 (4)
UNLOCK TABLES 释放锁 (6)

session2
select * from mylock where id = 2 无法进行操作 (需要换成不同的ID,mysql自带了缓存) (3)
update mylock set name = ‘f’ where id = 2 无法进行操作 (5)
select * from mylock where id = 2 查询正常操作 (7)
update mylock set name = ‘f’ where id = 1 更新正常操作 (8)

  1. 总结
    表共享读锁,顾名思义,读取数据session都能select,锁不释放的情况下,表没法进行更新和新增。
    表独占写锁,占据锁的session可以对表进行 update,insert,select操作。锁不释放的情况下,其他session没法进行表进行操作。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值