数据库事务

22 篇文章 1 订阅

事务并发引发的问题

在线购物平台、商品、库存

隔离级别

1.读未提交

2.读已提交

3.可重复读

4.串行化

 

脏读:读到未提交的数据

不可重复读:一个事务中读到不同的结果(读的过程中,别的事务提交了)

幻读:

查询隔离级别

select @@tx_isolation;

//设置read uncommitted级别:
set session transaction isolation level read uncommitted;

//事务A
start TRANSACTION;

select * from account

update account set money = 16 where id = 1;
//事务B
start TRANSACTION;

select * from account;

事务B看到了事务A中修改但未提交的数据

//设置read committed级别:
set session transaction isolation level read committed;

事务A Commit

出现了不可重复读的问题

//设置repeatable read级别:
set session transaction isolation level repeatable read;

可以解决重复读的问题,但是会出现幻读的问题

//设置serializable级别:
set session transaction isolation level serializable;

串行化:有事务在查看的时候,别的事务无法做新增或修改操作

innodb锁的原理

1.共享锁

     S锁,读锁

     又称读锁,若事务T对数据对象A加上S锁,则其他事务可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

2.排它锁

     X锁,写锁

     若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。

3.意向共享锁

    IS

4.意向排它锁

    IX

5.自增锁

    开事务,新增,再回滚,id也会被算上(比如新增的ID为3,4,5,又回滚了,那么下次id开始就是6)

6.临键锁

> < between

左开又闭

7.间隙锁

没有匹配记录,会降级为间隙锁

8.记录锁

 

innodb上的行锁,锁的是什么?

行锁就是给索引上的索引项加锁。

锁和隔离级别的关系

幻读:临键锁

不可重复读:S锁,共享锁

脏读:X锁,排它锁

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值