oracle学习记录-DML

oracle学习记录-DML

  • 简介
  • insert语法
    • 插入数据
      • 向表中插入空值
      • 插入指定的值
  • 创建脚本
  • 从其它表中拷贝数据
  • update
  • 删除数据
  • 数据库事务
  • COMMIT和ROLLBACK语句的优点
  • 控制事务
    • 回滚到保留点
    • 事务进程
      • 提交或回滚前的数据状态
      • 提交后的数据状态
      • 提交数据
      • 数据回滚后的状态
      • 总结
  • constraint(约束)
    • 表级约束和列级约束
      • 语法
    • NOT NULL 约束
    • UNIQUE 约束
    • PRIMARY KEY 约束
    • FOREIGN KEY 约束
      • FOREIGN KEY 约束的关键字
    • CHECK 约束
  • 添加约束
  • 删除约束
  • 无效化约束
  • 激活约束
  • 查询约束
  • 查询定义约束的列
  • 视 图
    • 常见的数据库对象
    • 视图的好处
    • 简单视图和复杂视图
    • 创建视图
    • 查询视图
    • 修改视图
    • 创建复杂视图
    • 视图中使用DML的规定
    • 屏蔽 DML 操作
    • 删除视图
  • Top-N 分析
  • 序列
    • 语法
    • 查询序列
    • NEXTVAL 和 CURRVAL 伪列
      • 举例
    • 使用序列
    • 修改序列
      • 注意事项
    • 删除序列
  • 索 引
    • 创建索引
      • 什么时候创建索引
      • 什么时候不要创建索引
    • 查询索引
    • 删除索引
  • 同义词-synonym
    • 创建和删除同义词
  • 控制用户权限
    • 权 限
    • 系统权限
      • 创建用户
      • 用户的系统权限
      • 赋予系统权限
      • 创建用户表空间
    • 角 色
    • 建角色并赋予权限
  • 修改密码
  • 对象权限
    • 分配对象权限
      • WITH GRANT OPTION和PUBLIC关键字
  • 查询权限分配情况
  • 收回对象权限
    • 总结
  • SET 运算符
    • set操作符
    • union 操作实例
    • UNION ALL
    • INTERSECT 操作符
    • MINUS
    • SET 操作符注意事项
  • 高级子查询
    • 子查询
      • 多列子查询
    • 成对比较举例
    • 不成对比较举例
    • 在 FROM 子句中使用子查询
    • 单列子查询表达式
    • 相关子查询
    • EXISTS 操作符
      • EXISTS 操作符应用举例
      • NOT EXISTS 操作符应用举例
    • 相关更新
    • 相关删除
    • WITH 子句

简介

DML(Data Manipulation Language-数据操纵语言)可以在下列条件下执行:

  • 向表中插入数据
  • 修改现存数据
  • 删除现存数据
    事务是由完成若干项工作的DML语句组成的

insert语法

oracle学习记录-DML_第1张图片

插入数据

oracle学习记录-DML_第2张图片

向表中插入空值

oracle学习记录-DML_第3张图片

插入指定的值

SYSDATE 记录当前系统的日期和时间
oracle学习记录-DML_第4张图片
oracle学习记录-DML_第5张图片

创建脚本

  • 在SQL 语句中使用 & 变量指定列值。
  • & 变量放在values子句中。
    oracle学习记录-DML_第6张图片

从其它表中拷贝数据

oracle学习记录-DML_第7张图片

update

oracle学习记录-DML_第8张图片

删除数据

oracle学习记录-DML_第9张图片

数据库事务

  • 事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态。
  • 数据库事务由以下的部分组成:
    一个或多个DML 语句
    一个 DDL(Data Definition Language – 数据定义语言) 语句
    一个 DCL(Data Control Language – 数据控制语言) 语句
  • 以第一个 DML 语句的执行作为开始
  • 以下面的其中之一作为结束:
                                              COMMITROLLBACK 语句
                                                 DDL 语句(自动提交)
                                                 用户会话正常结束
                                                 系统异常终止

COMMIT和ROLLBACK语句的优点

使用COMMIT 和 ROLLBACK语句,我们可以:
确保数据完整性。
数据改变被提交之前预览。
将逻辑上相关的操作分组。

控制事务

oracle学习记录-DML_第10张图片

回滚到保留点

oracle学习记录-DML_第11张图片

事务进程

  • 自动提交在以下情况中执行:
  1. DDL 语句。
  2. DCL 语句。
    不使用 COMMIT 或 ROLLBACK 语句提交或回滚,正常结束会话。
  • 会话异常结束或系统异常会导致自动回滚。

提交或回滚前的数据状态

改变前的数据状态是可以恢复的
执行 DML 操作的用户可以通过 SELECT 语句查询之前的修正

其他用户不能看到当前用户所做的改变,直到当前用户结束事务。
DML语句所涉及到的行被锁定, 其他用户不能操作

提交后的数据状态

数据的改变已经被保存到数据库中。
改变前的数据已经丢失。
所有用户可以看到结果。
锁被释放,其他用户可以操作涉及到的数据。
所有保存点被释放。

提交数据

oracle学习记录-DML_第12张图片

数据回滚后的状态

oracle学习记录-DML_第13张图片

总结

oracle学习记录-DML_第14张图片

constraint(约束)

约束是表级的强制规定
有以下五种约束:

NOT NULL
UNIQUE 
PRIMARY KEY
FOREIGN KEY
CHECK

在这里插入图片描述

表级约束和列级约束

oracle学习记录-DML_第15张图片

语法

oracle学习记录-DML_第16张图片
oracle学习记录-DML_第17张图片

NOT NULL 约束

非空约束:值不能为空
oracle学习记录-DML_第18张图片

UNIQUE 约束

唯一约束:允许出现多个空值:Null,不允许出现列的值重复
oracle学习记录-DML_第19张图片

PRIMARY KEY 约束

主键约束:不允许空值
可以定义在表级或列级:
oracle学习记录-DML_第20张图片

FOREIGN KEY 约束

外键约束
可以定义在表级或列级:
oracle学习记录-DML_第21张图片

FOREIGN KEY 约束的关键字

oracle学习记录-DML_第22张图片

CHECK 约束

检查约束:定义每一行是否满足条件
oracle学习记录-DML_第23张图片

添加约束

oracle学习记录-DML_第24张图片
oracle学习记录-DML_第25张图片

删除约束

从表 EMPLOYEES 中删除约束
在这里插入图片描述

无效化约束

在ALTER TABLE 语句中使用 DISABLE 子句将约束无效化。
在这里插入图片描述

激活约束

ENABLE 子句可将当前无效的约束激活
在这里插入图片描述
当定义或激活UNIQUE 或 PRIMARY KEY 约束时系统会自动创建UNIQUE 或 PRIMARY KEY索引

查询约束

oracle学习记录-DML_第26张图片

查询定义约束的列

oracle学习记录-DML_第27张图片

视 图

常见的数据库对象

oracle学习记录-DML_第28张图片
视图是一种虚表。
视图建立在已有表的基础上, 视图赖以建立的这些表称为基表
向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句.
视图向用户提供基表数据的另一种表现形式

视图的好处

  • 控制数据访问
  • 简化查询
  • 避免重复访问相同的数据

简单视图和复杂视图

oracle学习记录-DML_第29张图片

创建视图

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

oracle学习记录-DML_第30张图片
oracle学习记录-DML_第31张图片

查询视图

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

oracle学习记录-DML_第32张图片

修改视图

oracle学习记录-DML_第33张图片

创建复杂视图

oracle学习记录-DML_第34张图片

视图中使用DML的规定

oracle学习记录-DML_第35张图片
当视图定义中包含以下元素之一时不能使用update:
组函数
GROUP BY子句
DISTINCT 关键字
ROWNUM 伪列
列的定义为表达式
当视图定义中包含以下元素之一时不能使insert:
组函数
GROUP BY 子句
DISTINCT 关键字
ROWNUM 伪列
列的定义为表达式
表中非空的列在视图定义中未包括

屏蔽 DML 操作

oracle学习记录-DML_第36张图片
oracle学习记录-DML_第37张图片

删除视图

oracle学习记录-DML_第38张图片

Top-N 分析

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

最大和最小的值的集合是 Top-N 分析所关心的
oracle学习记录-DML_第39张图片
oracle学习记录-DML_第40张图片

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

序列

序列: 可供多个用户用来产生唯一数值的数据库对象
自动提供唯一的数值
共享对象
主要用于提供主键值
将序列值装入内存可以提高访问效率

语法

oracle学习记录-DML_第41张图片
oracle学习记录-DML_第42张图片

查询序列

oracle学习记录-DML_第43张图片

NEXTVAL 和 CURRVAL 伪列

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

举例

oracle学习记录-DML_第44张图片

使用序列

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

修改序列

oracle学习记录-DML_第45张图片

注意事项

oracle学习记录-DML_第46张图片

删除序列

oracle学习记录-DML_第47张图片

索 引

oracle学习记录-DML_第48张图片

创建索引

自动创建: 在定义 PRIMARY KEYUNIQUE 约束后系统自动在相应的列上创建唯一性索引
手动创建: 用户可以在其它列上创建非唯一的索引,以加速查询
oracle学习记录-DML_第49张图片

什么时候创建索引

以下情况可以创建索引:
列中数据值分布范围很广
列经常在 WHERE 子句或连接条件中出现
表经常被访问而且数据量很大 ,访问的数据大概占数据总量的2%到4%

什么时候不要创建索引

下列情况不要创建索引:
表很小
列不经常作为连接条件或出现在WHERE子句中
查询的数据大于2%到4%
表经常更新

Desc emp;
Create index name_index on emp(name);

索引不需要用,只是说我们在用name进行查询的时候,速度会更快。当然查的速度快了,插入的速度就会慢。因为插入数据的同时,还需要维护一个索引。

查询索引

oracle学习记录-DML_第50张图片

删除索引

oracle学习记录-DML_第51张图片

同义词-synonym

oracle学习记录-DML_第52张图片

创建和删除同义词

oracle学习记录-DML_第53张图片

控制用户权限

权 限

数据库安全性:
系统安全性
数据安全性
系统权限: 对于数据库的权限
对象权限: 操作数据库对象的权限

系统权限

超过一百多种有效的权限
数据库管理员具有高级权限以完成管理任务,例如:
创建新用户
删除用户
删除表
备份表

创建用户

oracle学习记录-DML_第54张图片

用户的系统权限

oracle学习记录-DML_第55张图片

赋予系统权限

oracle学习记录-DML_第56张图片

创建用户表空间

用户拥有create table权限之外,还需要分配相应的表空间才可开辟存储空间用于创建的表
oracle学习记录-DML_第57张图片

角 色

oracle学习记录-DML_第58张图片

建角色并赋予权限

oracle学习记录-DML_第59张图片

修改密码

oracle学习记录-DML_第60张图片

对象权限

oracle学习记录-DML_第61张图片
oracle学习记录-DML_第62张图片

分配对象权限

oracle学习记录-DML_第63张图片

WITH GRANT OPTION和PUBLIC关键字

oracle学习记录-DML_第64张图片

查询权限分配情况

oracle学习记录-DML_第65张图片

收回对象权限

oracle学习记录-DML_第66张图片
oracle学习记录-DML_第67张图片

总结

在这里插入图片描述

SET 运算符

set操作符

oracle学习记录-DML_第68张图片

union 操作实例

UNION 操作符返回两个查询的结果集的并集
oracle学习记录-DML_第69张图片

UNION ALL

UNION ALL 操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重。
oracle学习记录-DML_第70张图片

INTERSECT 操作符

INTERSECT 操作符返回两个结果集的交集
oracle学习记录-DML_第71张图片

MINUS

MINUS操作符:返回两个结果集的差集
oracle学习记录-DML_第72张图片

SET 操作符注意事项

在SELECT 列表中的列名和表达式在数量和数据类型上要相对应
括号可以改变执行的顺序
ORDER BY 子句:
只能在语句的最后出现
可以使用第一个查询中的列名, 别名或相对位置

除 UNION ALL之外,系统会自动将重复的记录删除
系统将第一个查询的列名显示在输出中
除 UNION ALL之外,系统自动按照第一个查询中的第一个列的升序排列
oracle学习记录-DML_第73张图片
oracle学习记录-DML_第74张图片

高级子查询

子查询

子查询是嵌套在 SQL 语句中的另一个SELECT 语句

  • 子查询 (内查询) 在主查询执行之前执行
  • 主查询(外查询)使用子查询的结果
    oracle学习记录-DML_第75张图片
    oracle学习记录-DML_第76张图片

多列子查询

oracle学习记录-DML_第77张图片
多列子查询中的比较分为两种:
成对比较
不成对比较

成对比较举例

oracle学习记录-DML_第78张图片

不成对比较举例

oracle学习记录-DML_第79张图片

在 FROM 子句中使用子查询

oracle学习记录-DML_第80张图片
oracle学习记录-DML_第81张图片

单列子查询表达式

oracle学习记录-DML_第82张图片
oracle学习记录-DML_第83张图片
oracle学习记录-DML_第84张图片

相关子查询

oracle学习记录-DML_第85张图片
oracle学习记录-DML_第86张图片
oracle学习记录-DML_第87张图片
oracle学习记录-DML_第88张图片

EXISTS 操作符

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

EXISTS 操作符应用举例

oracle学习记录-DML_第89张图片

NOT EXISTS 操作符应用举例

oracle学习记录-DML_第90张图片

相关更新

oracle学习记录-DML_第91张图片
oracle学习记录-DML_第92张图片

相关删除

oracle学习记录-DML_第93张图片
oracle学习记录-DML_第94张图片

WITH 子句

使用 WITH 子句, 可以避免在 SELECT 语句中重复书写相同的语句块
WITH 子句将该子句中的语句块执行一次并存储到用户的临时表空间中
使用 WITH 子句可以提高查询效率
oracle学习记录-DML_第95张图片

你可能感兴趣的:(oracle,数据库,dba)