Mysql-事务

  1. MySQL的InnoDB的幻读问题
  2. MySQL的四种事务隔离级别
  3. MySQL的InnoDB的幻读问题
  4. MySQL中的锁(表锁、行锁)
  5. mybatis 乐观锁实现,解决并发问题
  6. Mybatis乐观锁插件
-- 查看当前会话的隔离级别	
	select @@tx_isolation;
-- 设置当前会话隔离级别
	set session transaction isolation level serializable;
-- 查看系统当前隔离级别
	select @@global.tx_isolation;
-- 设置系统当前隔离级别
	set global transaction isolation level repeatable read;
--  取消自动提交
	set autocommit=0;
	
-- 事务的并发问题
	-- 脏读			:读未提交
	-- 不可重复读	:读已提交
	-- 幻读
	
-- 事务的隔离级别
	-- 读未提交(read-uncommitted)
	-- 不可重复读(read-committed)
	-- 可重复读(repeatable-read)
	-- 串行化(serializable)
	



-- mysql 锁——serializable
	set autocommit=0;
	set session transaction isolation level serializable;
	START TRANSACTION;
	SELECT * FROM gongzi;
	INSERT INTO `yanglei_test`.`gongzi` ( `name`, `money`) VALUES ( 'E', '100');
	INSERT INTO `yanglei_test`.`user_info` (`name`, `age`) VALUES ( '1', '1');
	COMMIT;

-- 引发死锁

事务的并发问题

1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。

3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

 

MySQL事务隔离级别

事务隔离级别脏读不可重复读幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)

 

    //如果先申请共享锁,修改时再请求排他锁,那样容易产生死锁
    @Override
    @Transactional(rollbackFor = Exception.class,timeout = 16000,isolation = Isolation.SERIALIZABLE)
    public void doLogSelective2(CompLog compLog) throws InterruptedException {
        log.info("=============开始进来睡眠3s,然后获取独占写锁============1");
        Thread.sleep(3 * 1000);
        compLog.setJobId(3333L);
        compLog.setId(35L);
        compLogMapper.updateByPrimaryKey(compLog);
        Thread.sleep(3 * 1000);
        log.info("============接着查询=============2");
        compLogMapper.selectAll();
        log.info("=============更新============3");
        compLog.setJobId(666L);
        compLogMapper.updateByPrimaryKey(compLog);
        Thread.sleep(5 * 1000);
        log.info("=============1111============END");
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值