oracle学习记录-DML
简介
DML(Data Manipulation Language-数据操纵语言)可以在下列条件下执行:
- 向表中
插入数据 修改现存数据删除现存数据
事务是由完成若干项工作的DML语句组成的
insert语法

插入数据

向表中插入空值

插入指定的值
SYSDATE 记录当前系统的日期和时间


创建脚本
- 在SQL 语句中使用
&变量指定列值。 &变量放在values子句中。

从其它表中拷贝数据

update

删除数据

数据库事务
- 事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态。
- 数据库事务由以下的部分组成:
一个或多个DML语句
一个DDL(Data Definition Language – 数据定义语言) 语句
一个 DCL(Data Control Language – 数据控制语言) 语句 - 以第一个 DML 语句的执行作为开始
- 以下面的其中之一作为结束:
COMMIT或ROLLBACK语句
DDL 语句(自动提交)
用户会话正常结束
系统异常终止
COMMIT和ROLLBACK语句的优点
使用COMMIT 和 ROLLBACK语句,我们可以:
确保数据完整性。
数据改变被提交之前预览。
将逻辑上相关的操作分组。
控制事务

回滚到保留点

事务进程
- 自动提交在以下情况中执行:
- DDL 语句。
- DCL 语句。
不使用 COMMIT 或 ROLLBACK 语句提交或回滚,正常结束会话。
- 会话异常结束或系统异常会导致自动回滚。
提交或回滚前的数据状态
改变前的数据状态是可以恢复的
执行 DML 操作的用户可以通过 SELECT 语句查询之前的修正
其他用户不能看到当前用户所做的改变,直到当前用户结束事务。
DML语句所涉及到的行被锁定, 其他用户不能操作
提交后的数据状态
数据的改变已经被保存到数据库中。
改变前的数据已经丢失。
所有用户可以看到结果。
锁被释放,其他用户可以操作涉及到的数据。
所有保存点被释放。
提交数据

数据回滚后的状态

总结

constraint(约束)
约束是表级的强制规定
有以下五种约束:
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK

表级约束和列级约束

语法


NOT NULL 约束
非空约束:值不能为空

UNIQUE 约束
唯一约束:允许出现多个空值:Null,不允许出现列的值重复

PRIMARY KEY 约束
主键约束:不允许空值
可以定义在表级或列级:

FOREIGN KEY 约束
外键约束
可以定义在表级或列级:

FOREIGN KEY 约束的关键字

CHECK 约束
检查约束:定义每一行是否满足条件

添加约束


删除约束
从表 EMPLOYEES 中删除约束

无效化约束
在ALTER TABLE 语句中使用 DISABLE 子句将约束无效化。

激活约束
ENABLE 子句可将当前无效的约束激活

当定义或激活UNIQUE 或 PRIMARY KEY 约束时系统会自动创建UNIQUE 或 PRIMARY KEY索引
查询约束

查询定义约束的列

视 图
常见的数据库对象

视图是一种虚表。
视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。
向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句.
视图向用户提供基表数据的另一种表现形式
视图的好处
- 控制数据访问
- 简化查询
- 避免重复访问相同的数据
简单视图和复杂视图

创建视图
create view empview as
select * from employees; # 创建视图empview从employees表


查询视图
select * from empview ;# select * from empview (视图名)

修改视图

创建复杂视图

视图中使用DML的规定

当视图定义中包含以下元素之一时不能使用update:
组函数
GROUP BY子句
DISTINCT 关键字
ROWNUM 伪列
列的定义为表达式
当视图定义中包含以下元素之一时不能使insert:
组函数
GROUP BY 子句
DISTINCT 关键字
ROWNUM 伪列
列的定义为表达式
表中非空的列在视图定义中未包括
屏蔽 DML 操作


删除视图

Top-N 分析
Top-N 分析查询一个列中最大或最小的 n 个值:
销售量最高的十种产品是什么?
销售量最差的十种产品是什么?
最大和最小的值的集合是 Top-N 分析所关心的


select *
from(
select rownum rn,employee_id,salary
from(
select employee_id,salary,last_name
from employees
order by salary desc
)
)where rn <=50 and rn >40
序列
序列: 可供多个用户用来产生唯一数值的数据库对象
自动提供唯一的数值
共享对象
主要用于提供主键值
将序列值装入内存可以提高访问效率
语法


查询序列

NEXTVAL 和 CURRVAL 伪列
NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用
CURRVAL 中存放序列的当前值
NEXTVAL 应在 CURRVAL 之前指定 ,否则会报CURRVAL 尚未在此会话中定义的错误。
举例

使用序列
将序列值装入内存可提高访问效率
序列在下列情况下出现裂缝:
回滚
系统异常
多个表同时使用同一序列
如果不将序列的值装入内存(NOCACHE), 可使用表 USER_SEQUENCES 查看序列当前的有效值
修改序列

注意事项

删除序列

索 引

创建索引
自动创建: 在定义 PRIMARY KEY 或 UNIQUE 约束后系统自动在相应的列上创建唯一性索引
手动创建: 用户可以在其它列上创建非唯一的索引,以加速查询

什么时候创建索引
以下情况可以创建索引:
列中数据值分布范围很广
列经常在 WHERE 子句或连接条件中出现
表经常被访问而且数据量很大 ,访问的数据大概占数据总量的2%到4%
什么时候不要创建索引
下列情况不要创建索引:
表很小
列不经常作为连接条件或出现在WHERE子句中
查询的数据大于2%到4%
表经常更新
Desc emp;
Create index name_index on emp(name);
索引不需要用,只是说我们在用name进行查询的时候,速度会更快。当然查的速度快了,插入的速度就会慢。因为插入数据的同时,还需要维护一个索引。
查询索引

删除索引

同义词-synonym

创建和删除同义词

控制用户权限
权 限
数据库安全性:
系统安全性
数据安全性
系统权限: 对于数据库的权限
对象权限: 操作数据库对象的权限
系统权限
超过一百多种有效的权限
数据库管理员具有高级权限以完成管理任务,例如:
创建新用户
删除用户
删除表
备份表
创建用户

用户的系统权限

赋予系统权限

创建用户表空间
用户拥有create table权限之外,还需要分配相应的表空间才可开辟存储空间用于创建的表

角 色

建角色并赋予权限

修改密码

对象权限


分配对象权限

WITH GRANT OPTION和PUBLIC关键字

查询权限分配情况

收回对象权限


总结

SET 运算符
set操作符

union 操作实例
UNION 操作符返回两个查询的结果集的并集

UNION ALL
UNION ALL 操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重。

INTERSECT 操作符
INTERSECT 操作符返回两个结果集的交集

MINUS
MINUS操作符:返回两个结果集的差集

SET 操作符注意事项
在SELECT 列表中的列名和表达式在数量和数据类型上要相对应
括号可以改变执行的顺序
ORDER BY 子句:
只能在语句的最后出现
可以使用第一个查询中的列名, 别名或相对位置
除 UNION ALL之外,系统会自动将重复的记录删除
系统将第一个查询的列名显示在输出中
除 UNION ALL之外,系统自动按照第一个查询中的第一个列的升序排列


高级子查询
子查询
子查询是嵌套在 SQL 语句中的另一个SELECT 语句
- 子查询 (内查询) 在主查询执行之前执行
- 主查询(外查询)使用子查询的结果


多列子查询

多列子查询中的比较分为两种:
成对比较
不成对比较
成对比较举例

不成对比较举例

在 FROM 子句中使用子查询


单列子查询表达式



相关子查询




EXISTS 操作符
EXISTS 操作符检查在子查询中是否存在满足条件的行
如果在子查询中存在满足条件的行:
不在子查询中继续查找
条件返回 TRUE
如果在子查询中不存在满足条件的行:
条件返回 FALSE
继续在子查询中查找
EXISTS 操作符应用举例

NOT EXISTS 操作符应用举例

相关更新


相关删除


WITH 子句
使用 WITH 子句, 可以避免在 SELECT 语句中重复书写相同的语句块
WITH 子句将该子句中的语句块执行一次并存储到用户的临时表空间中
使用 WITH 子句可以提高查询效率

本文详细介绍了Oracle数据库的DML操作,包括insert、update、delete,以及事务处理、COMMIT/ROLLBACK、约束和视图等核心概念。通过实例演示了数据操作、事务控制和视图创建,适合数据库初学者和进阶者参考。
728

被折叠的 条评论
为什么被折叠?



