数据库并发控制、事务的隔离级别、由低到高分别为Read uncommitted读未提交、Read committed读提交、Repeatable read重复读、Serializable序列化

本文深入探讨了数据库事务的四种隔离级别:读未提交、读提交、可重复读和序列化,以及它们如何影响并发操作中的脏读、不可重复读和幻读现象。通过实例解析了每种隔离级别的行为,并指出其优缺点。MySQL的默认隔离级别是可重复读,而Serializable级别虽然提供最高数据安全性但性能最低。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5.数据库并发控制

5.6 事务的隔离级别

  数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable。而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读。

√:可能出现 ×:不会出现
脏读不可重复读幻读
Read uncommitted(读未提交)
Read committed(读提交)×
Repeatable read(重复读)××
Serializable(序列化)×××

Serializable 性能最低,数据安全性最高;Read uncommitted 性能最高,数据安全性最差

-- 查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;

-- 设置事务隔离级别
-- SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE };
-- SESSION 是会话级别,表示只针对当前会话有效,GLOBAL 表示对所有会话有效
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

5.6.1 Read uncommitted(读未提交)

  读未提交,就是一个事务可以读取另一个未提交事务的数据。
  事例:张三的工资是15k,这个月发工资,财务不小心按错了数字,还没有来得及提交事务,就在这个时候,张三发现的工资变为了19k,张三以为涨工资了高兴的飞起,财务发现不对,回滚了事务,将工资改回了15k万元再提交。
  分析:实际张三这个月的工资还是15k万,但是张三看到的是19k万。张三看到的是老板还没提交事务时的数据。这就是脏读。

时间事务A事务B
T1开启事务开启事务
T2查询得到的值为15k查询得到的值为15k
T3将15k改为19k
T4查询得到的值为19k
T5将19k改为15k
T6查询得到的值为15k
T7提交事务B
T8查询得到的值为15k
T9提交事务A

读未提交演示

5.6.2 Read committed(读提交)

  读提交,就是一个事务要等另一个事务提交后才能读取数据。
  事例:张三的工资是15k,这个月发工资,财务给张三涨工资,将张三的工资改为19k,还没有来得及提交事务,就在这个时候,张三查询他的工资时还是15k,张三以为不给他涨工资了有点失落,财务提交了事务,然后张三不相信没有给他涨工资,就又查了一遍,发现他的工资涨到了19k。
分析:如果有事务对数据进行更新(UPDATE)操作时,读取数据事务要等待这个更新操作事务提交后才能读取数据,有效的避免脏读,但是一个事务进行了两次相同的查询而返回了不同的数据,这就是不可重复读。

时间事务A事务B
T1开始事务
T2查询得到的值为15k开始事务
T3将15k改为19k
T4事务提交
T5查询得到的值为19k
T6事务提交

读提交,不可重复读

5.6.3 Repeatable read(重复读)

  重复读,就是在开始读取数据(事务开启)时,不再允许修改操作。
  事例:张三的工资是15k,这个月发工资,张三查询他的工资时是15k,财务给张三涨工资,将张三的工资改为19k,提交了事务,张三再次查询他的工资时还是15k,张三以为不给他涨工资了有点失落,提交了事务,然后张三不相信没有给他涨工资,就又查了一遍,发现他的工资涨到了19k。
  分析:重复读可以解决不可重复读问题。写到这里,应该明白的一点就是,不可重复读对应的是修改,即UPDATE操作。但是可能还会有幻读问题。因为幻读问题对应的是插入INSERT操作,而不是UPDATE操作。

5.6.3.1 可重复读
时间事务A事务B
T1开始事务
T2查询得到的值为15k开始事务
T3将值改为19k
T4查询得到的值为15k
T5提交事务
T6查询得到的值为15k
T7提交事务
T8查询得到的值为19k

可重复读

5.6.3.2 出现幻读
时间事务A事务B
T1开始事务
T2查询id为3的值是为空的开始事务
T3插入一行值,id为3
T4提交事务
T5查询id为3的值是为空的
T6插入一行值,id为3,报错,有id为3的
T7查询id为3的值是为空的
T8提交事务

幻读

5.6.4 Serializable(序列化)

  Serializable是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。
  提醒:大多数数据库默认的事务隔离级别是Read committed(读提交),比如Sql Server , Oracle。Mysql的默认隔离级别是Repeatable read(重复读).

时间事务A事务B
T1开始事务开始事务
T2插入一行值,id为4
T3插入一行值,id为4,等待中,不能插入
T4提交事务显示不能插入,因为有id为4了
T5提交事务
<think>嗯,用户问的是AD软件中换层的快捷键。首先,我需要确定AD指的是哪个软件。通常,AD可能指Altium Designer,这是一款常用的电子设计自动化软件,用于电路板设计。所以用户可能是在使用Altium Designer时想要快速切换层,提高工作效率。 接下来,我需要回忆或查找Altium Designer中关于层切换的快捷键。根据之前的知识,Altium Designer中确实有一些快捷键用于切换不同的层。比如,小键盘的数字键可能对应不同的层,例如1是Top Layer,2是Mid Layer 1,依此类推。不过,不同版本可能会有些差异,所以需要确认这一点是否正确。 另外,用户可能还不太清楚如何自定义这些快捷键,或者是否有其他方式快速换层。比如,使用快捷键L调出层设置面板,或者通过Preferences设置自定义快捷键。这可能是用户潜在的需求,想要更灵活地调整快捷键以适应自己的习惯。 还要考虑用户可能的操作环境,比如是否在使用英文版软件,或者是否有安装不同版本的Altium Designer,因为不同版本快捷键可能不同。此外,用户可能对层的概念不太熟悉,比如信号层、电源层、丝印层等,是否需要简要解释这些层的用途,以帮助用户更好地理解换层的意义。 另外,是否有其他相关功能,比如切换层的同时切换走线层,或者如何在多层板中快速跳转,这些也可能是用户需要的信息。比如在布线时按数字键切换层并自动添加过孔,这样的操作是否可行,需要确认正确性。 总结一下,回答需要包括: 1. 常用默认快捷键,如小键盘数字键对应各层。 2. 如何通过快捷键L打开层设置面板。 3. 自定义快捷键的方法。 4. 可能需要注意的版本差异或操作细节。 5. 简要说明层的类型和用途,帮助用户理解为何需要换层。 需要确保信息准确,避免错误,比如Altium Designer是否真的使用小键盘数字键作为默认切换层的快捷键。可能需要查阅官方文档或可靠来源确认。此外,提醒用户如果快捷键不起作用,可能需要检查键盘设置或软件版本,确保兼容性。 最后,组织回答时要结构清晰,分点说明,便于用户理解。如果有不确定的地方,建议用户参考软件帮助文档或官方资源,以确保信息的正确性。</think>在 Altium Designer(AD)中,**换层快捷键**是提高 PCB 设计效率的重要工具。以下是常用操作说明: --- ### 一、默认快捷键 1. **小键盘数字键** - 按下数字键 **1~6** 可快速切换至对应信号层(例如:1=Top Layer,2=Mid Layer 1,依此类推)。 - **+/- 键**:切换至下一层/上一层(需开启小键盘的 Num Lock)。 2. **信号层与平面层切换** - **Shift+Ctrl+鼠标滚轮**:按住后滚动滚轮可快速切换层(需按住快捷键)。 3. **特殊层快捷键** - **L**:打开层设置面板(快速启用/禁用层显示)。 - **Ctrl+Shift+G**:切换到丝印层(Top Overlay)。 - **Ctrl+Shift+M**:切换到阻焊层(Top Solder Mask)。 --- ### 二、自定义快捷键 1. 通过 **Preferences > PCB Editor > Shortcuts** 修改快捷键。 2. 搜索功能关键词(如 `Layer Next`、`Layer Previous`)绑定自定义按键。 --- ### 三、实用技巧 1. **布线时自动换层**: 布线过程中按下对应层数字键,软件会自动添加过孔并切换至目标层。 2. **层高亮显示**: 按 **Shift+S** 进入单层模式,按层数字键可快速高亮特定层。 --- ### 四、注意事项 - 不同版本快捷键可能略有差异,建议通过 **Help > Shortcuts** 确认当前版本设置。 - 若快捷键失效,检查键盘输入法或软件冲突。 如果需要更详细的层管理(如创建/删除层),可通过 **Design > Layer Stack Manager** 操作。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Redamancy_06

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值