事务(TRANSACTION)
事务(TRANSACTION)
事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。
从开始操作到提交(commit)的操作合集称为事务。
事务的提交 DCL(COMMIT/ROLLBACK):
COMMIT:提交此次事务永久保存操作后的数据
ROLLBACK:回滚到上次事务保存是的数据
注:DDL 语句的操作会自带有提交的效果
事务的特性 ACID:
原子性(Atomicity):事务是一个逻辑工作单元,是一个整体不可分割,一个事务中的所有操作(DML语句)要么全都执行(COMMIT),要么全都不执行(ROLLBACK)
一致性(Consistency):事务结束前后,每个用户看到的数据都是一致的
隔离性(Isolation):在事务结束之前,它操作的数据,对其他用户不可见,是隔离的
持久性(Durability):事务提交(COMMIT)成功后,结果是永久的,不能回滚(ROLLBACK)
事务的隔离级别:
READ COMMITTED(读已提交):Oracle 默认使用 READ COMMITTED,防止脏读,常用于提升性能和并发性
SERIALIZABLE(可串行化):最高的隔离级别,事务独立执行,模拟串行顺序发生,提供一致性但可能降低并发性能
READ ONLY(只读):事务只允许读操作,不允许修改,用于确保数据一致性读取
隔离级别可能导致以下问题:脏读、不可重读读、幻读
脏读:当一个事务正在修改某一数据并且还没有提交时,另一个事务可以读取到这个未提交的数据,这种情况通常发生在 READ UNCOMMITTED(读未提交) 隔离级别下
不可重读读:一个事务在两次读取操作之间,另一个事务对同一数据进行了修改并提交,导致前后读取的数据不一致,这种情况通常发生在 READ COMMITTED(读已提交) 隔离级别下
幻读:在一个事务内,执行相同查询时结果集的行数可能发生变化。这是因为另一事务插入或删除了数据行。 这种情况通常发生在 READ COMMITTED(读已提交) 和 REPEATABLE READ(可重复读) 隔离级别下
脏读 是最严重的问题,因为它涉及读取未提交的数据。
不可重复读 和 幻读 都涉及到读取已提交的数据,但它们的区别在于:
不可重复读是指同一行数据被修改。
幻读是指结果集中的行数发生变化(例如,插入或删除行)

浙公网安备 33010602011771号