mysql数据库锁机制

数据库锁机制:
按照数据库操作类型分:读锁、写锁
读锁(共享锁):针对同一份数据,多个读操作可以同时进行且不相互影响。
写锁(排它锁):当前写操作没有完成之前,它会阻断其他写锁和读锁。

按照数据库操作粒度分:表锁、行锁

表锁(偏读):
表锁偏向于MylSAM 存储引擎,开销小,加锁快,无思索,锁定粒度大,发生锁冲突的概率最高,并发度最低。
下面实例:
–建表sql
CREATE TABLE mylock (
id int(11) NOT NULL AUTO_INCREMENT,
NAME varchar(20) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

–插入数据
INSERT INTO test.mylock (id, NAME) VALUES (‘1’, ‘a’);
INSERT INTO test.mylock (id, NAME) VALUES (‘2’, ‘b’);
INSERT INTO test.mylock (id, NAME) VALUES (‘3’, ‘c’);
INSERT INTO test.mylock (id, NAME) VALUES (‘4’, ‘d’);

–加读锁
lock table mylock read;
–查询当前表:可以查询到记录,操作成功
select * from mylock;
–当前会话查询其他表,操作失败
select * from student
–查询其他表:查询不到记录
select * from student;
–插入数据失败:当前session中更新、插入表操作都失败
其他session中更新、插入表操作都会一直在运行中状态
INSERT INTO mylock(name) VALUES (‘f’)
–删除表锁
unlock tables;

–加写锁
lock table mylock write;
---- 加锁之后当前session下增删改查操作都能执行
select * from mylock
insert into mylock(name) VALUES(‘m’);
update mylock set name= ‘h’ where id = 1;
delete from mylock where id = 5;
–当前session下查询其他表失败
select * from student

–其他session下查询mylock表,一直保持执行状态
select * from mylock

总结:读锁会阻塞写,但不会阻塞读
写锁会阻塞读,也会阻塞写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值