Oracle-数据操作与事务控制
原创约 1666 字大约 6 分钟...
29-Oracle数据操作与事务控制.md
注意
本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。
数据操作语言
Data Manipulation Language ,简称DML,主要用来实现对数据库表中的数据进行操作。
数据操作语言主要包括如下几种:
- 增加行数据:使用INSERT语句实现
- 修改行数据:使用UPDATE语句实现
- 删除行数据:使用DELETE语句实现
- 合并行数据:按照指定条件合并两个表的数据,使用MERGE语句实现
事务处理语言
- 事务(Transaction)概念
事务:也称工作单元,是由一个或多个SQL语句所组成的操作序列,这些SQL语句作为一个完整的工作单元,要么全部执行成功,要么全部执行失败。在数据库中,通过事务来保证数据的一致性。
事务处理语言:Transaction Process Language ,简称TPL,主要用来对组成事务的DML语句的操作结果进行确认或取消。确认也就是使DML操作生效,使用提交(COMMIT)命令实现;取消也就是使DML操作失效,使用回滚(ROLLBACK)命令实现。
通过事务的使用,能防止数据库中出现数据不一致现象。如两个银行账户进行转账,涉及到两条更新操作,这两条更新操作只允许全部成功或失败,否则数据会出现不一致的现象。
- 事务(Transaction)概念
事务组成
事务特性
- 事务特征可用四个字母的缩写表示:即ACID
- 原子性(Atomicity)
- 事务就像“原子”一样,不可被分割,组成事务的DML操作语句要么全成功,要么全失败,不可能出现部分成功部分失败的情况。
- 一致性(Consistency)
- 一旦事务完成,不管是成功的,还是失败的,整个系统处于数据一致的状态。
- 隔离性(Isolation)
- 一个事务的执行不会被另一个事务所干扰。比如两个人同时从一个账户从取钱,通过事务的隔离性确保账户余额的正确性。
- 持久性(Durability)
- 也称为永久性,指事务一旦提交,对数据的改变就是永久的,不可以再被回滚。
- 原子性(Atomicity)
- 事务特征可用四个字母的缩写表示:即ACID
事务结束
- 显示结束
- 提交(COMMIT):使用COMMIT命令实现,以成功的方式结束事务,组成事务的DML语句操作全部生效。
- 回滚(ROLLBACK):使用ROLLBACK命令实现,以失败的方式结束事务,组成事务的DML语句操作全部被取消。
- 隐式结束
隐式提交:当下列任意一种情况发生时,会发生隐式提交
- 执行一个DDL(CREATE、ALTER、DROP、TRUNCATE、RENAME)语句;
- 执行一个DCL(GRANT、REVOKE)语句;
- 从SQL*Plus正常退出(即使用EXIT或QUIT命令退出);
隐式回滚:当下列任意一种情况发生时,会发生隐式回滚
- 从SQL*Plus中强行退出
- 客户端连接到服务器端异常中断
- 系统崩溃
- 显示结束
事务开启
- 事务自动开启于上一个事务结束后,执行的第一个DML语句。
- 例如:
- ….
- COMMIT; --结束一个事务;
- SELECT….
- INSERT…. --开启一个事务
- UPDATE….
- DELETE….
- SELECT….
- INSERT…
- COMMIT; --结束一个事务
- UPDATE… --开启一个事务
- DELETE….
- ROLLBACK… ;--结束一个事务
设置保存点
- 设置保存点:如果在一个事务内,想要回滚到指定位置,不是回滚到事务的起始点,可以通过保存点(SAVEPOINT)来实现。
- SAVEPOINT savepointname;--定义一个保存点语句;
- ROLLBACK TO savepointname;--回滚到指定保存点
- 注意:如上两条语句不结束事务的执行。
- 设置保存点:如果在一个事务内,想要回滚到指定位置,不是回滚到事务的起始点,可以通过保存点(SAVEPOINT)来实现。
例:分析如下操作序列
DELETE FROM test ;
ROLLBACK; ——撤消DELETE操作
INSERT INTO test VALUES(’A’);
SAVEPOINT insert_a; ——定义insert_a保存点
INSERT INTO test VALUES(’B’);
SAVEPOINT insert_b; ——定义insert_b保存点
INSERT INTO test VALUES(’C’);
ROLLBACK TO insert_b; ——撤消操作到insert_b保存点
DELETE FROM test WHERE test_str = ‘A’;
COMMIT; ——将所有修改写入数据库
ROLLBACK; -—所有操作已经COMMIT提交,不能回滚
锁
- 锁的概念
- 锁用来在多用户并发访问和操作数据库时,保证数据的一致性的一种机制;
- 锁由Oracle自动管理,如一个DML操作,ORACLE默认的机制是在DML操作影响的行记录上自动加锁;
- 锁在被相关的操作申请并持有后,会一直保持到事务的结束,事务结束后,锁才会被释放;
- 查询语句不会锁定任何记录,如果在查询语句后面加FOR UPDATE子句会锁定查询所影响的行记录;
提交或回滚前数据状态
- 提交(COMMIT)或回滚(ROLLBACK)前的数据状态
- 数据变化前的状态可以被恢复;
- 当前会话可以使用SELECT语句来验证DML操作后的结果;
- 其它会话不能查看由当前用户的DML操作结果;
- 受影响记录被锁定,也就是其它用户不能改变受影响记录中的数据;
- 在数据库中数据变化成为永久性的,先前的数据状态永久性的消失;
- 所有用户/会话都可以查询到提交COMMIT后的结果;
- 锁定的记录被释放,可以有效地被其他用户操作;
- 所有的存储节点被清除;
- 提交(COMMIT)或回滚(ROLLBACK)前的数据状态
回滚(ROLLBACK)后的数据状态
- 先前的数据状态被恢复;
- 锁定的记录被释放;
- 所有的存储节点被清除;
知识拓展
Oracle数据库PL SQL开发、Oracle-SQL开发习题答案
Oracle基础——DCL(数据控制语言)之Oracle权限
分割线
相关信息
以上就是我关于 Oracle-数据操作与事务控制 知识点的整理与总结的全部内容,希望对你有帮助。。。。。。。
Powered by Waline v2.15.4