事务是什么?事务的4个特点(ACID),事务的开启与结束

事务是指作为单个逻辑工作单元执行的一组相关操作。这些操作要求全部完成 或者全部不完成。使用事务是为了保证数据的安全有效。

事务有一下四个特点:(ACID

1、原子性(Atomic):事务中所有数据的修改,要么全部执行,要么全部不执行。

2、一致性(Consistence):事务完成时,要使所有所有的数据都保持一致的状态, 换言之:通过事务进行的所有数据修改,必须在所有相关的表中得到反映。

3、隔离性(Isolation):事务应该在另一个事务对数据的修改前或者修改后进行访问。

4、持久性(Durability):保证事务对数据库的修改是持久有效的,即使发生系统故障, 也不应该丢失。

当事务之间发生并发时有几个隔离级别。

 

 Oracle 默认的隔离级别是 read committed

丢失更新:两个事务同时存储, 一个存储 100 , 一个存储 200,最终可能至存储了 200 或者 100,那另一个的更新就没成功,即结果不为预想的 300

脏读:事务 T1 更新了一行数据,还没有提交所做的修改,T2 读取更新后的数据,T1 回滚,T2 读取的数据无效,这种数据称为脏读数据。

不可重复读:事务 T1 读取一行数据,T2 修改了 T1 刚刚读取的记录,T1 再次查询, 发现与第一次读取的记录不相同,称为不可重复读。

幻读:事务 T1 读取一条带 WHERE 条件的语句,返回结果集,T2 插入一条新纪录, 恰好也是 T1 WHERE 条件,T1 再次查询,结果集中又看到 T2 的记录,新纪录就叫 做幻读。

 

事务的开启自动开启于 DML insert delete update

事务的结束

1) 成功

2) 失败 rollback ,手动回滚  

非法退出 意外的断电l

rollback 只能对未提交的数据撤销,已经 Commit 的数据是无法撤销的,因为 commit 之后已经持久化到数据库中。

 

 

添加数据 可以手写也可以从别的表中获取的);àinsert into 表名 values(和表结构顺序和个数和类型一致的数据 insert into 表名(指定列名) values(和指定的列个数、顺序、类型一致的列数据)

 

update 表名 set 字段=[,....] where 过滤行记录;

 

delete [from] 表名 where 过滤行记录

 

转自尚学堂学员的Java面试准备笔记--陆同学,上海尚学堂Java培训24期学员,已经入职上海企业,月薪11K起步。

 

转载于:https://www.cnblogs.com/shsxt/p/10690050.html

### 事务的定义 事务是指一组逻辑操作单元,这些操作单元必须作为一个整体来执行。如果其中任何一部分失败,则整个事务将被撤销并返回到初始状态,从而确保系统的数据一致性[^4]。 --- ### ACID 属性详解 #### 1. **原子性 (Atomicity)** 原子性表示事务是一个不可分割的工作单位。这意味着事务中的所有操作要么完全成功,要么完全不执行。如果事务的一部分失败,那么整个事务都会回滚至原始状态,以防止部分更新导致的数据不一致现象[^1]。 ```sql BEGIN TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE id = 1; -- 转账扣款 UPDATE accounts SET balance = balance + 100 WHERE id = 2; -- 转账入账 COMMIT; ``` 在这个例子中,转账涉及两个账户的操作。如果其中一个 `UPDATE` 失败,比如网络中断或其他异常情况,整个事务会被回滚,保证资金不会丢失或重复计算。 --- #### 2. **一致性 (Consistency)** 一致性要求事务的执行结果必须使数据库从一个有效状态转换到另一个有效状态。换句话说,事务完成后,数据库的状态应满足所有的预定义约束条件、触发器其他业务规则。如果没有达到预期效果,系统会通过回滚机制撤消已做的更改。 例如,在银行系统中,一笔成功的交易应该始终保持总金额不变: ```sql -- 总余额校验查询 SELECT SUM(balance) FROM accounts; ``` 无论有多少笔转账发生,只要事务遵循一致性原则,上述查询的结果应当恒定。 --- #### 3. **隔离性 (Isolation)** 隔离性意味着多个并发事务之间互不影响。每个事务在其独立的环境下运行,就好像其他事务不存在一样。这样可以避免因并发访问而导致的各种问题,如脏读、不可重复读幻读等问题[^3]。 以下是几种常见的隔离级别及其特点: - **读未提交(Read Uncommitted)**: 最低级别的隔离,允许一个事务读取另一事务尚未提交的数据,可能导致脏读。 - **读已提交(Read Committed)**: 只能读取已经提交的数据,解决了脏读问题,但仍可能出现不可重复读。 - **可重复读(Repeatable Read)**: 确保同一事务内的多次相同查询返回同样的结果集,但可能面临幻读风险。 - **串行化(Serializable)**: 最高的隔离等级,强制事务按顺序依次执行,彻底杜绝了任何形式的干扰[^3]。 --- #### 4. **持久性 (Durability)** 一旦事务完成提交,其所做的一切变更都将永久保存在数据库里,即便随后发生了严重的系统故障也不会丧失这些成果[^2]。为了达成此目标,现代关系型数据库通常采用写前日志技术(WAL),先将变动信息记录于磁盘上的日志文件后再实际修改数据页内容。 --- ### 小结 综上所述,事务具备四个核心属性——原子性、一致性、隔离性持久性,简称ACID。它们共同协作保障了复杂业务流程下的数据可靠性安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值