我在码歌坚持的第九天,离搞定 oracle还差最后一步

开篇寄语

有的人打动我之处在于:什么好听的话都没说,却什么细微的事都做了。

每一次努力,都是幸运的伏笔。

读完寄语,驱散一天的阴霾,收拾心情,开始学习的路途

第九章 事务

9.1 事务介绍

9.1.1 什么是事务

在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元操作,要么一个也不执行。
使用事务是为了保证数据的安全有效。

9.1.2 事务的开始与结束

事务是用来分割数据库活动的逻辑工作单元,事务即有起点,也有终点;事务的处理就是保证数据操作的完整性,所有的操作要么成功要么同时失败。

事务开启
Oracle的事务默认开始于一个DML语句(insert update delete)

事务结束
事务会以成功或失败结束,当下列事件之一发生时,事务就结束了:
执行 COMMIT(提交) 或 ROLLBACK(回滚)语句;
执行一条 DDL语句,例如 CREATE TABLE语句;在这种情况下, 会自动执行 COMMIT 语句;
执行一条 DCL语句,例如GRANT语句;在这种情况下,会自动执行COMMIT语句;
断开与数据库的连接。在退出SQL Plus时,通常会输入EXIT命令,此时会自动执行COMMIT语句。如果SQL Plus被意外终止了(例如运行SQL Plus的计算机崩溃了),那么就会自动执行ROLLBACK语句;
使用了隐士的事务,SET AUTOCOMMIT ON (只针对一条SQL语句有效)

9.2 事务特性

SQL92标准定义了数据库事务的四个特点:

•原子性(Atomicity):一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都做,要么都不做。
•一致性(Consistency):事务开始时,数据库中的数据是一致的,事务结束时,数据库的数据也应该是一致的。
•隔离性(Isolation):是指数据库允许多个并发事务同时对其中的数据进行读写和修改的能力,隔离性可以防止事务的并发执行时,由于他们的操作命令交叉执行而导致的数据不一致状态。
•持久性 (Durability) : 是指当事务结束后,它对数据库中的影响是永久的,即便系统遇到故障的情况下,数据也不会丢失。

一组SQL语句操作要成为事务,数据库管理系统必须保证这组操作的原子性(Atomicity)、一致性(consistency)、隔离性(Isolation)和持久性(Durability),这就是ACID特性。
针对读取数据时可能产生的不一致现象,在SQL92标准中定义了4个事务的隔离级别:

隔离级别 脏读 不可重复读 幻读
Read uncommitted(读未提交)
Read committed(读已提交)
Repeatable read(可重复读)
Serializable(串行读)

Oracle默认的隔离级别是read committed
Oracle支持上述四种隔离级别中的两种:read committed 和serializable。除此之外,Oralce中还定义Read only和Read write隔离级别。
Read only:事务中不能有任何修改数据库中数据的操作语句,是Serializable的一个子集。
Read write:它是默认设置,该选项表示在事务中可以有访问语句、修改语句,但不经常使用。
两个客户(事务)并发访问数据库数据时可能存在的问题

1.幻读:

事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新记录并commit,恰好满足T1的where条件。然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想。

1.不可重复读取:

事务T1读取一行记录,紧接着事务T2修改了T1刚刚读取的记录并commit,然后T1再次查询,发现与第一次读取的记录不同,这称为不可重复读。

1.脏读:

事务T1更新了一行记录,还未提交所做的修改,这个T2读取了更新后的数据,然后T1执行回滚操作,取消刚才的修改,所以T2所读取的行就无效,也就是脏数据。

9.3 事务控制命令

9.3.2 commit

在执行使用COMMIT语句可以提交事务,当执行了COMMIT语句后,会确认事务的变化,结束事务,删除保存点,释放锁。当使用COMMIT语句结束事务之后,其他会话将可以查看到事务变化后的新数据。
commit;

9.3.2 rollback

当执行ROLLBACK时表示要取消刚刚的事务中的操作。ROLLBACK语句结束事务后,其他会话将不会察觉变化。
rollback;

9.3.3 事务保存点

保存点(savepoint):是事务中的一点,用于取消部分事务,当结束事务时,会自动的删除该事务所定义的所有保存点。当执行ROLLBACK时,通过指定保存点可以回退到指定的点。
设置保存点:
savepoint a;
删除保存点:
release Savepoint a;
回滚部分事务
rollback to a;

9.3 建立事务

SET TRANSACTION READ ONLY--事务中不能有任何修改数据库中数据的操作语句,这包括 insertupdatedeletecreate语句

SET TRANSACTION READ WRITE--默认设置,该选项表示在事务中可以有访问语句、修改语句

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE--serialzable可以执行DML操作
注意:这些语句是互斥的,不能够同时设置两个或者两个以上的选项

猜你喜欢

转载自blog.csdn.net/u014332333/article/details/88234585
今日推荐