首页  

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 简介