封锁类型有两种:读写锁和意向锁
读写锁分类读锁(s锁)和写锁(x锁)。两端锁协议:加锁和解锁分两阶段执行,为事务可串行化调度提供支持
隐式和显式锁定:MySQL的InnoDB引擎采用两端锁协议,自动加锁,属于隐式锁定,同时也可以显式锁定
乐观锁和悲观锁都是为了事务的并发控制。
乐观锁 | 悲观锁 | |
---|---|---|
目的 | 事务提交时检测冲突 | 事务执行时避免冲突 |
实现 | 版本控制 | 数据库锁机制 |
MVCC全称是多版本并发控制,是InnoDB实现隔离级别的一种方式,用于实现可提交读与可重读。MVCC并不是完全不用加锁,而是避免了对SELECT加锁的操作,提高性能。
原理:读操作时读取旧版本快照,写操作时更新新版本快照
快照读:MVCC的SELECT读取的是旧版本快照
当前读:MVCC的UPDATE/DELETE/INSERT需要加锁,读取最新的数据。
Next-Key Locks避免了幻影读,通常和MVCC配合。
第一范式:属性不可再分
第二范式:非主属性完全依赖于键码
第三范式:非主属性不传递依赖于键码
SQL是关系型数据库,如MySQL、Oracle;NoSQL泛指非关系型数据库,如Redis。
SQL | NoSQL | |
---|---|---|
性能 | 较低 | 较高 |
应用 | 结构性数据,如账号、密码 | 非结构性数据,如文章、评论 |
表 | 固定结构表 | Json或其他方式,更加灵活 |
外键 | 可以添加外键联合查询 | 直接在原数据中添加 |
事务 | 通过事务控制表的隔离级别 | 每一个操作都具有原子性 |