mysql 悲观锁
所属分类 mysql
浏览量 84
select * from xxx where id = 1 for update
事务没有结束之前 ,指定的记录会被锁定 ,
其他事务不能对指定记录 ,进行update操作,这种机制被称为 行级锁
注意: mysql InnoDB 才支持事务
乐观锁可以使用版本号来实现,给表加一个版本号字段(譬如version),
多个事务同时进行,当其中一个事务完成之后递增版本号,其他事务在提交的时候发现版本号改变了,就会回滚
悲观锁 我锁住了,谁都不能动这些记录
乐观锁 大家都可以动,谁的速度快谁就可以执行命令
-- 查看
select @@autocommit;
-- 关闭
set autocommit = 0;
START TRANSACTION;
COMMIT;
ROLLBACK;
create table test_locks(id int primary key, owner varchar(32) not null)
insert into test_locks (id,owner) values(1,'tiger')
select * from test_locks where id=1 for update
update test_locks set owner='dbview' where id=1
update test_locks set owner='cat' where id=1
mysql客户端
使用 select * from test_locks where id=1 for update ,锁定记录
其他 对 该记录更新的操作会阻塞 直到 mysql客户端 commit 或 rollback 或 连接断开
四种事务隔离级别
READ UNCOMMITTED , READ COMMITTED ,REPEATABLE READ , SERIALIZABLE
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
查看数据库版本
select version();
看事务隔离级别
查看当前会话的事务隔离级别:
SELECT @@tx_isolation; 或者 SELECT @@session.tx_isolation;
mysql8 使用 transaction_isolation
SELECT @@transaction_isolation; 或者 SELECT @@session.transaction_isolation;
查看系统全局的事务隔离级别:
SELECT @@global.tx_isolation; 或者 SELECT @@global(transaction_isolation);
SELECT @@global.transaction_isolation; 或者 SELECT @@global(transaction_isolation);
SELECT @@global.transaction_isolation;
REPEATABLE-READ
数据库悲观锁的缺点:
性能下降:由于每次访问资源时都需要加锁,这会显著降低系统的并发性和性能
增加死锁风险:在高竞争场景下,多个事务互相等待对方释放锁,可能导致死锁
管理开销大:处理加锁机制会产生额外的系统开销
上一篇
下一篇
quartz countJob 实例
quartz 配置文件 quartz.properties
Kafka 时间轮 TimingWheel
quartz.properties配置文件详解
java 技术学习面试指南
shardingsphere 简介