Oracle DML语句概述

本文介绍了Oracle数据库中的DML语句,包括SELECT、INSERT、UPDATE、DELETE和MERGE,及其可能遇到的错误类型。文章还深入讨论了事务的控制,包括原子性、一致性、隔离性和持久性的保证,以及如何通过COMMIT、ROLLBACK和SAVEPOINT来管理事务。此外,还提到了PL/SQL对象、锁机制和队列在并发控制中的作用。

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

DML语句包括:

  • SELECT
  • INSERT
  • UPDATE
  • DELETE
  • MERGE

 

DML语句错误的原因:

1、语法错误

2、引用不存在的对象和列

3、访问权限问题

4、违反约束条件

5、空间问题

 

控制事务

一个事务包含一个或多个DML语句,以ROLLBACK或COMMIT命令结尾;

Oracle事务一致性是靠undo segments和redo log files文件保证的;

关系型数据库必须保证:ACID

A:Atomicity 原子性:原子性是保证事务中的各个部分要么全部执行成功,要么全部失败;

C:Consistency 一致性:一致性要保证所有的查询结果都是一样的;

I:Isolation  隔离性:每一个事务之间都是互相不可见的;

D:Durability 持久性:一旦事务完成,数据库就不能丢失数据;

 

当一个查询进行时发现其中的数据已经更改了,那么他就会到undo segment中去读取旧的版本;

 

所有的DML操作都需要在datablocks ,undo blocks, 并且产生redo logs

A,C and I需要产生undo blocks;

D需要产生 redo logs;

 

只有事务提交后,数据的改变才能永久的保存下来,并且被其他session可见

事务是不能嵌套的,不允许在一个事务结束前开始另外一个事务;事务是嵌套可以通过PL/SQL来完成;

显示的事务控制语句的命令为:COMMIT,ROLLBACK, SAVEPOINT;也有隐身控制的语句,如:

  • 实施DDL(CREATE, ALTER, DROP,SELECT FOR UPDATE)或DCL(GRANT, REVOKE)语句
  • 从用户端工具中退出,如:SQL*PLUS或SQL Developer
  • 当客户端会话死掉:这时整个事务会rollback
  • 当系统宕机;事务会rollback

 

SAVEPOINT并不是SQL标准的一部分;

 

COMMIT:并不会用DBWn往磁盘数据文件上写数据,而仅仅是将log buffer中的数据写入磁盘,并且将事务的标志置为完成;

The redo log stream includes allchanges: those applied to data segments and to undo segments, for bothcommitted and uncommitted transactions;

 

当你使用EXIT退出sqlplus时,事务会提交,当你点击关闭按钮退出sqlplus时,事务会回滚;

有一个SET AUTOCOMMIT ON语句可以在SQLPLUS中设置,在DML语句执行时,自动提交事务;

 

 

PL/SQL对象

PL/SQL是Oracle公司私有的第三代语言,PL/SQL总是在数据库上进行运行,而不管它是存储在服务器上还是客户端。

Stored PL/SQL对象是存储在数据字典中的,

anonymous PL/SQL对象是存储在远端的;

PL/SQL对象总共有六种类型:

  • Procedure
  • Function
  • Package
  • Package body
  • Trigger
  • Type body

 

使用触发器的好处:

  • 审计用户的行为
  • 执行复杂的编辑
  • 安全
  • 加强复杂的约束

 

one session can take an exclusivelock on a row, or a whole table, at a time

but  shared locks can be taken on the same objectby many sessions;

不应该在行级别上使用共享锁;

使用共享锁的目的是防止其他会话在这个对象上加操作锁;

当执行DML语句的时候,会话必须在操作对象的行级别上加操作锁,在表级别上加共享锁;

加共享锁的目的是防止其他会话对该表进行DDL操作;

 

队列机制

可以使用SELECT….FOR UPDATE NOWAIT 或 SELECT ….FOR UPDATE WAIT(n),来避免使用该语句是的排队等待;

 

引起锁竞争的原因:

长时间 运行的事务会导致锁竞争;

一些第三方用户 进程会提高锁的级别,从行级锁提高的表级锁;

 

当会话发生锁定而需要终止时,可以使用Database Control发现锁定的的会话,并使用ALTER SYSTEM KILL SESSION 命令来终止会话

 

死锁不是DBA的错误,而是错误的程序设计产生的,它可以由数据库自动的进行处理;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值