【八股学习】MySQL——事务、锁、MVCC

事务

一组操作,要么都执行要么都不执行

# 开启一个事务
START TRANSACTION;
# 多条 SQL 语句
SQL1,SQL2...
## 提交事务
COMMIT;

ACID特性 ⭐

1、原子性:事务是最小执行单位,不允许分割,要么都完成要么都不完成
2、一致性:事务执行前后数据保持一致
3、隔离性:并发访问数据库,各个并发事务之间数据库是独立的
4、持久性:实现上面三种特性后才能保证当前特性。事务提交后对数据的改变是持久的

并发事务带来的问题

简单介绍一下四个问题,以便后续了解四个事务隔离等级
1、脏读:一个事务读取并修改了数据,但是没有提交,此时的修改对其他事务是可见的,如果另一个事务带去了还未提交的数据,但第一个数据发生回滚。那么就读取到了脏数据。简单来说:事务2读取了事务1修改但未提交的数据,随后事务1回滚了数据
2、丢失修改:两个事务同时获取到一个数据后,同时又对这个数据进行了修改,那么早提交的事务的修改就丢失了。
3、不可重复读:两个事务读取到同一个数据后,事务1对其进行了修改并提交,随后事务2又读取了该数据,发现数据发生了改变
4、幻读:一个事务读取了几行数据,随后另一个事务插入了一些数据,再进行读取的时候发现多了一些不存在的记录。

并发控制

MVCC 和 锁中进行补充 :TODO

事务隔离级别 ⭐

结合并发事务带来的问题可以更好地理解这个概念

  • 读取未提交:最低隔离级别,允许读取尚未提交的数据变更
  • 读取已提交:允许读取并发事务已经提交的数据
  • 可重复读:同一字段多次读取结果是一致的,除非本身的事务自己修改了数据。InnoDB的默认级别
  • 可串行化:完全服从ACID,所有事务逐个执行
### PostgreSQL 常见面试题及答案 #### 什么是 PostgreSQL 的特点? PostgreSQL 是一种功能强大的开源关系型数据库管理系统。其特性包括但不限于支持复杂的查询、外键、触发器、视图、事务完整性以及多版本并发控制 (MVCC)[^1]。 #### PostgreSQL 支持哪些数据类型? PostgreSQL 提供了丰富的内置数据类型,涵盖了数值类型(如 `integer`)、字符类型(如 `varchar`)、日期/时间类型(如 `timestamp`),还有数组、JSON 类型等特殊的数据结构。 #### 多版本并发控制(MVCC)是如何工作的? 通过 MVCC, PostgreSQL 实现了一种机制,在这种机制下读操作不会阻塞写操作,反之亦然。每当有新的更新发生时,旧版本的数据会被保留一段时间以便于未完成的读取能够继续访问这些历史记录;而新启动的会话则可以看到最新的提交状态下的数据副本。 #### 如何确保 PostgreSQL 中的安全性? 为了保障安全,PostgreSQL 使用角色和权限管理来控制谁可以做什么事情。还可以配置 SSL 加密用于客户端通信保护敏感信息传输过程中的隐私性和完整性。另外,行级安全策略允许更细粒度地定义特定表内不同用户的可见范围。 #### 在同一个事务中怎样让后续语句能看到之前修改过的行? 默认情况下,由于实现了 MVCC 特性,单个事务内部无法立即看见自己所做的更改直到整个事务结束并成功提交为止。如果确实需要这样做,则可以通过设置合适的隔离级别或者利用保存点等功能实现这一需求。 #### PostgreSQL 跟 Oracle 和 MySQL 主要有哪些差异? 相比于 Oracle 或者 MySQL ,PostgreSQL 更加注重标准兼容性和高级特性支持,比如窗口函数、CTE(公用表达式),并且拥有更好的扩展能力。此外,它还提供了更为灵活的对象模型,使得开发者可以根据实际应用场景定制化存储引擎之外的功能模块。 #### SQL 和 PostgreSQL 最显著的区别是什么? 虽然两者都遵循 ANSI-SQL 标准,但是 PostgreSQL 对某些特性的实现方式有所不同,特别是在处理复杂查询优化方面表现出色。例如,对于子查询的支持更加全面,同时也引入了许多增强版语法糖衣,简化了一些常用场景的操作流程。 #### PostgreSQL 和 NoSQL 数据库之间有什么主要的不同之处? NoSQL 数据库通常被设计用来应对大规模分布式环境下的高性能要求,牺牲一致性换取可用性和分区容忍度(CAP理论)。相反,PostgreSQL 则坚持 ACID 属性,适合那些对数据一致性和可靠性有着严格要求的应用程序开发工作。 #### PostgreSQL 和 MongoDB 有何区别? MongoDB 是文档导向型 NoSQL 数据库之一,擅长快速迭代应用的数据建模阶段。然而,当涉及到强关联关系维护或是高度规范化的设计时,传统的关系型数据库如 PostgreSQL 显示出了无可比拟的优势——后者不仅具备完整的参照完整性约束体系,而且在执行聚合运算等方面也具有明显性能优势。 ```sql -- 创建一个简单的表的例子 CREATE TABLE example ( id SERIAL PRIMARY KEY, name VARCHAR NOT NULL ); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值