MySQL事务与锁

什么是数据库的事务?

原子性Atomicity:通过事务日志实现回滚,undo log

一致性Consistent:

隔离性Isolation:

持久性Durable:崩溃恢复,redo log

查看是否开启
SHOW VARIABLES LIKE 'autoc%'

手动开启事务:两种方式
begin;

START TRANSACTION;

结束事务:两种方式

ROLLBACK;

COMMIT;

关闭事务

set autocommit = off

事务并发会带来什么问题

脏读:读取到未提交的数据

不可重复读:在一个事务中前后两次查询不一致的情况。

幻读:读取到已提交的数据

事务隔离性与锁的关系

行锁的原理与算法详解

行锁:包括共享和排他

         共享锁:一行数据加上共享锁,其他事务也可以加上共享锁。

加锁方式 select * from user where id = 1 lock in share mode;

释放锁:事务结束: commit/rollback

         排他锁:

加锁方式:自动delete,update,insert 默认加上x锁

手动:select * from student where id = 2 for update;

释放锁:commit/rollback

表锁:意向共享锁is和意向排他锁ix

   

锁的作用:

select * from user where id = 1 for update; 加锁成功
select * from user where id = 4 for update; 加锁失败
insert into user (555,zhangsan) ;插入失败

一张表肯定有索引  InnoDB

当没有唯一索引,没有唯一索引等其他索引的时候,会使用rowid作为索引。rowid作为聚集索引。for update查询,或增删改的时候会把全部的隐藏索引都锁住。如果不带where条件,或加锁的字段没哟使用索引,会锁住整张表的索引。所以where最好精准锁定某个条件(索引字段);

锁定name索引(二级索引)的时候也会锁定主键索引。因为二级索引会产生回表现象。

四个锁的模式,三个锁的基本算法。

锁的算法:什么时候锁定什么范围

 

 

锁定不存在的区间意义在哪里?解决幻读

事务的特性原子性,隔离性,持久性是通过什么技术实现的?

原子性:通过undo log实现

隔离性:通过LBCC和MVCC实现

持久性:通过redo log实现

在InnoDB中,每一种事务隔离级别分别解决了什么问题?

读为提交:RU

读已提交:RC

可重复读:RR

串行化:S

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值