SQL数据库系统原理(二)———乐观锁与悲观锁、MVCC、范式理论、SQL和NoSQL比较

Bonita ·
更新时间:2024-11-13
· 733 次阅读

封锁的类型以及粒度,两段锁协议,隐式和显式锁定

封锁类型有两种:读写锁和意向锁

读写锁分类读锁(s锁)和写锁(x锁)。
对象加了写锁,可以更新与读取,不能加其他锁。
对象加了读锁,只能读取,可以加读锁
在这里插入图片描述 意向锁
新增了IS锁和IX锁,都是表锁,分别表达加S/X锁的意愿,有利于支持多粒度。
补充:粒度有两种:表锁、行锁,行锁开销大。

两端锁协议:加锁和解锁分两阶段执行,为事务可串行化调度提供支持
隐式和显式锁定:MySQL的InnoDB引擎采用两端锁协议,自动加锁,属于隐式锁定,同时也可以显式锁定

乐观锁与悲观锁

乐观锁和悲观锁都是为了事务的并发控制。

乐观锁 悲观锁
目的 事务提交时检测冲突 事务执行时避免冲突
实现 版本控制 数据库锁机制

在这里插入图片描述

MVCC原理,当前读以及快照读,Next-Key Locks

MVCC全称是多版本并发控制,是InnoDB实现隔离级别的一种方式,用于实现可提交读与可重读。MVCC并不是完全不用加锁,而是避免了对SELECT加锁的操作,提高性能。
原理:读操作时读取旧版本快照,写操作时更新新版本快照
快照读:MVCC的SELECT读取的是旧版本快照
当前读:MVCC的UPDATE/DELETE/INSERT需要加锁,读取最新的数据。
Next-Key Locks避免了幻影读,通常和MVCC配合。

范式理论

第一范式:属性不可再分
!](https://img-blog.csdnimg.cn/20200330234225622.png)
第二范式:非主属性完全依赖于键码
在这里插入图片描述
第三范式:非主属性不传递依赖于键码
在这里插入图片描述

SQL与NoSQL比较

SQL是关系型数据库,如MySQL、Oracle;NoSQL泛指非关系型数据库,如Redis。

SQL NoSQL
性能 较低 较高
应用 结构性数据,如账号、密码 非结构性数据,如文章、评论
固定结构表 Json或其他方式,更加灵活
外键 可以添加外键联合查询 直接在原数据中添加
事务 通过事务控制表的隔离级别 每一个操作都具有原子性

作者:影行



SQL 系统 乐观锁 范式 nosql sql数据库

需要 登录 后方可回复, 如果你还没有账号请 注册新账号