事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上的一组操作,要么都执行,要么都不执行。
查询隔离级别,隔离级别是通过锁来实现的,因此不同隔离级别会有不同的性能开销。
-- 查询隔离级别
select @@global.tx_isolation;
select @@tx_isolation;
-- 更改当前会话隔离级别
set session transaction isolation level serializable
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交(READ UNCOMMITTED) | ? | ? | ? |
读提交 (READ COMMITTED) | ? | ? | ? |
可重复读 (REPEATABLE READ) | ? | ? | ? |
串行化 (SERIALIZABLE) | ? | ? | ? |
隔离级别最低,性能最高。
任何事务的修改都会暴露给其他事务。
为解决1.1 脏数据问题,即一个事务只能读到其他事务已经提交过的数据,同时这也是Oracle默认的数据库隔离级别。
在事务中不同时间段可能会读到不一样的数据。
事务不会读到其他事务对已有数据的修改。即a,b两个事务,a修改了某个数据,b中无论a commit或者没有commit, b读的数据不变。但是会存在一个幻读问题。
后一个事务的执行必须等待前一个事务结束。
https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html
根节点至少一个元素
非根节点元素范围:m/2 <= k <= m-1 (m:阶数 )
优点:
单一节点存储的元素更多,使得查询的IO次数更少,所以也就使得它更适合做为数据库MySQL的底层数据结构了。
所有的查询都要查找到叶子节点,查询性能是稳定的,而B树,每个节点都可以查找到数据,所以不稳定。
所有的叶子节点形成了一个有序链表,更加便于查找。
缺点:
维护使用的开销比较大,尤其在一些insert delete时
Shared Locks ,简称 S锁;
独占锁 ,也常称 排他锁 ,Exclusive Locks ,简称 X锁 如select ** for update
表锁:即锁整个表
行锁:记录锁、间隙锁、临键锁都是属于行锁,
锁住的是表的某一行或多行记录
1、 主键或者唯一索引作为条件等值查询的时候,命中记录就是加的行锁(记录锁)
2、主键或者唯一索引作为条件等值查询没有命中记录,或者在范围查询没有命中记录的时候,加的 间隙锁 (rr隔离级别)
3、主键或者唯一索引作为条件范围值查询的时候,命中记录就是加的临健锁
【星猿杂谈】:在这里我们共同探索科技新趋势,分享积累的点滴,从编程语言到系统架构,从人工智能到高性能计算,我们追求技术的进步,同时珍视分享的力量。欢迎关注我们,在技术的精彩世界中一起遨游,发现更多未知!