什么是数据库的事务?
原子性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