MYSQL数据库学习笔记十一(读写锁)

1. 锁介绍参考博客:https://blog.csdn.net/qq_36630853/article/details/107140916

    按照锁的粒度来说,MySQL主要包含三种类型(级别)的锁定机制:
        全局锁:锁的是整个database。由MySQL的SQL layer层实现的
        表级锁:锁的是某个table。由MySQL的SQL layer层实现的              show open tables;
        行级锁:锁的是某行数据,也可能锁定行之间的间隙。由某些存储引擎实现,比如InnoDB。
    按照锁的功能来说分为:共享读锁和排他写锁。
    按照锁的实现方式分为:悲观锁和乐观锁(使用某一版本列或者唯一列进行逻辑控制)
    表级锁和行级锁的区别:
        表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;
        行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高;

2、读写锁区别:

读锁写锁一旦加上了就不能访问外面的表了;

读锁加上不可以修改表里数据;

写锁加上可以修改自己的表数据;

--新建表 
CREATE TABLE mylock (
id int(11) NOT NULL AUTO_INCREMENT, 
NAME varchar(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、session1: lock table mylock read; -- 给mylock表加读锁 
2、session1: select * from mylock; -- 可以查询 
3、session1:select * from tdep; --不能访问非锁定表 
4、session2:select * from mylock; -- 可以查询 没有锁 
5、session2:update mylock set name='x' where id=2; -- 修改阻塞,自动加行写锁 
6、session1:unlock tables; -- 释放表锁 
7、session2:update mylock set name='x' where id=2; -- 修改执行完成 
8、session1:select * from tdep; --可以访问

加了读锁以后就无法对表进行操作

2、表写锁

1、session1: lock table mylock write; -- 给mylock表加写锁 
2、session1: select * from mylock; -- 可以查询 
3、session1:select * from tdep; --不能访问非锁定表 
4、session1:update mylock set name='y' where id=2; --可以执行 
5、session2:select * from mylock; -- 查询阻塞 
6、session1:unlock tables; -- 释放表锁 
7、session2:4 rows in set (22.57 sec) -- 查询执行完成 
8、session1:select * from tdep; --可以访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值