Oracle Database-数据处理和表的管理部分
Oracle Database-数据处理和表的管理部分
*SQL的类型
- DML(Data Manipulation Language 数据操作语言):select/insert/update/delete
- DDL(Data Definition Language 数据定义语言):create table/alter table/truncate table/drop table
- create/drop view/sequnece/index/synonym(同义词)
- DCL(Data Control Language 数据控制语言):grant(授权)/revoke(撤销权限)
DML语句(增/删/改)
INSERT语句
- 为每一列添加一个新值
- 按列的默认顺序列出各个列的值
- 在INSERT 子句中随意列出列名和他们的值
- 字符和日期型数据应包含在单引号中
语法
插入空值
使用地址符来占位具体值
从其他表中拷贝数据
- 不需要书写VALUES子句
- 子查询中的值列表应该与INSERT子句中要被插入的列名相对应
- 这种方式可以一次插入多条数据
海量插入数据
- Oracle提供了数据泵(PLSQL程序):dbms_datapump(程序包)
- SQL*Loader
- 外部表
UPDATE语句
语法
一般使用WHERE子句来确定需要更新哪些数据
在UPDATE语句中使用子查询
更新操作中的数据完整性错误
DELETE语句
语法
使用WHERE子句来确定需要更新哪些数据
删除操作中的数据完整性错误
关于DELETE和TRUNCATE的异同
- 都是删除表中的数据
- delete是逐条删除,truncate是先摧毁表再重建
- delete速度更快,truncate速度比delete慢
- 原因:Oracle的undo数据功能
- delete是DML(数据操作语言)语句,truncate是DDL(数据定义语言)语句
- Delete操作可以回滚rollback
- Delete操作可以闪回(Oracle特有,再事务提交后可以闪回)
- 在Oracle中,大部分操作都可以闪回,即大部分操作都是可逆的
- Delete操作可能产生碎片,并且不释放空间
- 关于碎片
- 碎片使表的数据条目之间不连续,影响查询的速度
- 清理碎片的方法:
Oracle中的事务
Oracle中事务的概念
数据库事务的组成
- 一个或多个DML语句
- 一个DDL(Data Definition Language – 数据定义语言)语句
- 一个DCL(Data Control Language – 数据控制语言)语句
数据库事务的执行流程
- 以第一个DML语句的执行作为开始
- 以下面其中一种作为结束
- 显示结束:commit rollback
- 隐式结束(自动提交):DDL语言、DCL语言、exit(事务正常退出)
- DDL语句附带提交此前事务的操作
- 隐式回滚(系统异常终了):关闭窗口、死机或掉电等
COMMIT和ROLLBACK语句
- 确保数据完整性
- 数据改变被提交之前预览
- 将逻辑上相关的操作分组
通过SAVEPOINT控制事务
- 使用SAVEPOINT语句可以在当前事务中创建保存点。
- 使用ROLLBACK TO SAVEPOINT语句回滚到创建的保存点
- 使用SAVEPOINT来回滚可以避免出现小错误而回滚整个事务
数据库事务的隔离级别
- 脏读:对于两个事物T1,T2,T1读取了已经被T2更新但还没有被提交的字段。之后,若T2 回滚,T1读取的内容就是临时且无效的
- 不可重复读:对于两个事物T1,T2,T1读取了一个字段,然后T2更新了该字段。之后,T1再次读取同一个字段,值就不同了
- 幻读:对于两个事物T1,T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行。之后,如果T1再次读取同一个表,就会多出几行
数据库事务的隔离性
数据库提供的4种事务隔离级别
Oracle支持的两种事务隔离级别(或三种)
- Oracle支持2种事务隔离级别:READ COMMITED和SERIALIZABLE(或加上READ ONLY只读共三种)
- Oracle默认的事务隔离级别为:READ COMMITED
DDL语句(管理及操作表)
常见的数据库对象
表空间
建立表空间的语句
用户
创建用户的语句
为用户赋权限语句
角色
- connect角色
- resource角色
- dba角色
赋权语法
创建表
CREATE TABLE语句
- 用户需要具备CREATE TABLE权限
- 有足够的存储空间
语法
DEFAULT VALUE-默认值
- 值、表达式和SQL语句都可以作为默认值
- 其他的列名或者是伪列都是非法的
- 默认值的类型必须和该列的类型一致
利用select语句创建表
拷贝现有的表结构(创建与现有表的结构相同的表)
列的数据类型
- 是一串字符串
- 使用ROWID可以找到这一行
*表及列名的命名规则
- 必须以字母开头
- 必须在1–30 个字符之间
- 必须只能包含A–Z、a–z、0–9、_、$、和#
- 必须不能和用户定义的其他对象重名
- 必须不能是Oracle的保留字
- Oracle默认存储是都存为大写
- 数据库名只能是1~8位,datalink可以是128位,和其他一些特殊字符
*使用子查询创建表
- 指定的列和子查询中的列要一一对应
- 通过列名和默认值定义列
修改表
ALTER TABLE语句
- 追加新的列
- 修改现有的列
- 删除一个列
语法
列的追加/修改/删除/重命名
追加列的示例:
修改一个列的示例
删除一个列示例
删除表
DROP TABLE语句
- 数据和结构都被删除
- 所有正在运行的相关事物被提交
- 所有相关索引被删除
- DROP TABLE 语句不能回滚,但是可以闪回
语法
DROP TABLE不是将表彻底删除,只是将表放到RECYCLEBIN(回收站)中
purge关键字
从回收站恢复已删除的表
重命名对象
RENAME语句
语法
清空表
TRUNCATE TABLE语句
- 删除表中所有的数据
- 释放表的存储空间
语法
- TRUNCATE语句不能回滚
- 可以使用DELETE语句代替TRUNCATE语句删除数据
约束
约束的概念
- 约束是表一级的限制
- 如果存在依赖关系,约束可以防止错误的删除数据
- 约束的类型
- NOT NULL-非空约束
- UNIQUE-唯一约束
- PRIMARY KEY-主键约束
- FOREIGN KEY-外键约束
- CHECK-检查性约束
约束级别
- 列级约束:如果没有特别指明,一般都是列级约束
- 表级约束
- 典型:联合主键
约束规则
- 用户可以自定义约束,也可以使用OracleServer的sys_cn格式命名约束
- 约束创建的时机:
- 创建表的时候,同时创建约束
- 表结构创建完成后
- 约束可以定义在列一级,或者是表一级
- 通过数据字典查看约束
约束的类型
NOT NULL-非空约束
UNIQUE-唯一性约束
PRIMARY KEY-主键约束
- 不为空
- 唯一
FOREIGN KEY-外键约束
- FOREIGN KEY: 在子表中,定义了一个表级的约束
- REFERENCES: 指定表和父表中的列
- ON DELETE CASCADE: 当删除父表时,级联删除子表记录(谨慎使用,比较危险)
- ON DELETE SET NULL: 将子表的相关依赖记录的外键值置为null,此时子表这个记录与父表没有联系了
check-检查性约束
- 定义每一行记录所必须满足的条件
- 如工资应该是正数(>0)等
- 下面的表达式可以使用在check约束中:
- 引用CURRVAL、NEXTVAL、LEVEL、和ROWNUM
- 调用SYSDATE、UID、USER和USERENV函数
- 另一个表的查询记录
小结
常见的数据库对象
视图
- 视图是一种虚表
- 视图建立在已有表的基础上,视图赖以建立的这些表称为基表
- 视图本身是不存放数据的,数据来自基表
- 向视图提供数据内容的语句为SELECT语句,可以将视图理解为存储起来的SELECT语句
- 视图向用户提供基表数据的另一种表现形式
视图的优点
创建视图-基本
权限
语法
- FORCE:子查询不一定存在
- NOFORCE:子查询存在(默认)
- CHECK OPTION:只操作视图对应的数据,若操作视图不存在的数据则报错
- 如:视图为10号部门的员工视图,就不可以插入部门号为其他的员工条目了
- “只能操作看得到的”
- 不建议通过视图对表进行操作
- WITH READ ONLY:只能做查询操作
查询视图
语法
简单视图和复杂视图
替换(相当于修改)视图
使用CREATE OR REPLACE VIEW子句修改视图
创建复杂视图
复杂视图举例:查询各个部门的最低工资,最高工资,平均工资
视图中使用DML的规定
当视图定义中包含以下元素之一时不能使用delete
- 组函数
- GROUP BY子句
- DISTINCT(去重)关键字
- ROWNUM伪列
当视图定义中包含以下元素之一时不能使用update
- 组函数
- GROUP BY子句
- DISTINCT关键字
- ROWNUM伪列
- 列的定义为表达式
当视图定义中包含以下元素之一时不能使用insert
- 组函数
- GROUP BY子句
- DISTINCT关键字
- ROWNUM伪列
- 列的定义为表达式
- 表中非空的列在视图定义中未包括
屏蔽DML操作
- 可以使用WITH READ ONLY 选项屏蔽对视图的DML操作
- 任何DML操作都会返回一个Oracle server错误
删除视图
序列
- 自动提供唯一的数值
- 共享对象
- 主要用于提供主键值
- 将序列值装入内存中可以提高访问效率
- *创建序列就相当于创建一个数组
创建序列
语法
- INCREMENT BY n:定义自增量(步长),默认为1
- START WITH n:定义起始值,默认为1
- MAXVALUE n / MINVALUE n | NOMAXVALUE / NOMINVALUE:最大值/最小值 | 无最大值/无最小值,默认为无最大最小值
- CYCLE | NOCYCLE:是否循环(会产生重复的值),默认为NOCYCLE
- CACHE n | NOCACHE:缓存长度(相当于这个数组的长度),默认为20 | 无缓存,即长度为1
- 创建序列DEPT_DEPTID_SEQ为表DEPARTMENTS提供主键
- 自增量为10
- 起始值为120
- 默认无最小值
- 最大值为9999
- 不循环
- 不定义缓存
查询序列
示例
NEXTVAL和CURRVAL伪列(相当于操作数组的指针)
- NEXTVAL返回序列中下一个有效的值,任何用户都可以引用
- CURRVAL中存放序列的当前值
- NEXTVAL应在CURRVAL之前指定,二者应同时有效
序列的应用示例
序列的特点
- 将序列值装入内存可提高访问效率
- 序列在下列情况下出现裂缝(不连续了)
- 回滚
- 系统异常
- 多个表同时使用同一序列
- 如果不将序列的值装入内存(NOCACHE),可使用表USER_SEQUENCES查看序列当前的有效值
修改序列
示例
修改序列的注意事项
- 修改序列的用户必须是序列的拥有者或对序列有ALTER权限
- 只有将来的序列值会被改变
- 改变序列的初始值只能通过删除序列之后重建序列的方法实现
删除序列
- 使用DROP SEQUENCE语句删除序列
- 删除之后,序列不能再次被引用
索引
- 一种独立于表的模式对象,可以存储在与表不同的磁盘或表空间中
- 索引被删除或损坏,不会对表产生影响,其影响的只是查询的速度
- 索引一旦建立,Oracle管理系统会对其进行自动维护,而且由Oracle管理系统决定何时使用索引,用户不用在查询语句中指定使用哪个索引
- 在删除一个表时,所有基于该表的索引会自动被删除
- 通过指针加速Oracle服务器的查询速度
- 通过快速定位数据的方法,减少磁盘I/O
- “类似一本书的目录”
创建索引
索引的类型
- 单列索引:基于单个列所建立的索引
- 如CREATE index 索引名 on 表名(列名)
- 复合索引(多级索引):基于两个或多个列的索引,在同一张表上可以有多个索引,但是要求列的组合必须不同
- 如:CREATE index emp_idx1 on emp(ename,job);和CREATE index emp_idx2 on emp(job,ename);
索引底层原理类型
- B树(默认)
- 位图
自动创建
手动创建
示例
执行计划(效率对比-不创建索引和创建索引)
创建索引的时机
以下情况可以创建索引
- 列中数据值分布范围很广
- 列经常在WHERE子句或连接条件中出现
- 表经常被访问而且数据量很大,访问的数据大概占数据总量的2%到4%
以下情况不应该创建索引
- 表很小
- 列不经常作为连接条件或出现在WHERE子句中
- 查询的数据大于2%到4%
- 表经常更新(经常更新索引对应的列)
查询索引
示例
删除索引
使用DROP INDEX命令删除索引
删除索引UPPER_LAST_NAME_IDX
只有索引的拥有者或拥有DROP ANY INDEX权限的用户才可以删除索引
同义词(别名)
使用同义词访问相同的对象
- 方便访问其它用户的对象
- 缩短对象名字的长度
语法
创建和删除同义词
需要权限
创建同义词
删除同义词
转载于:https://www.cnblogs.com/zella1996/p/9550640.html
Oracle Database-数据处理和表的管理部分相关推荐
- Oracle Database 10g:删除表
使用 Oracle Database 10g 中的闪回表特性,可以毫不费力地恢复被意外删除的表 以下是一个不该发生却经常发生的情况:用户删除了一个非常重要的表 - 当然是意外地删除 - 并需要尽快地恢 ...
- Oracle Database的安装与卸载
目录 目录 软件环境 Oracle Database 就业前景 安装Oracle Server RDBMS体系结构 卸载Oracle Serveer 软件环境 系统 Windows 8.1 软件 Or ...
- Oracle数据库之多表查询
oracle安装参照: Oracle数据库之安装教程 Oracle数据库总结: Oracle数据库之基本查询 Oracle数据库之单行函数 Oracle数据库之多行函数 Oracle数据库之多表查询 ...
- oracle Database 10g后:闪回表
使用 Oracle Database 10g 中的闪回表特性,可以毫不费力地恢复被意外删除的表 以下是一个不该发生却经常发生的情况:用户删除了一个非常重要的表 - 当然是意外地删除 - 并需要尽快地恢 ...
- Oracle undo 表空间管理
Oracle 的Undo有两种方式: 一是使用undo 表空间,二是使用回滚段. 我们通过 undo_management 参数来控制使用哪种方式,如果设为auto,就使用UNDO 表空间,这时必须要 ...
- ORACLE表空间管理维护
1:表空间概念 在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段.区.块等逻辑结构.从物理结构上看是放在数据文件中.一个表空间可由多个数据文件组成. 如下图所示, ...
- oracle pdb 表空间,Oracle 12c CDB 和 PDB 表空间管理和配置 说明
注:本文谢绝转载. 1 管理CDB中的表空间 CDB表空间的管理和non-CDB 表空间的管理一样,CDB 也有一个实例,在安装的时候指定. --查看表空间: SQL> select inst ...
- oracle表空间管理图形界面,Oracle表空间管理和优化
Oracle 表空间管理和优化 1. TOM大神的表查询和授权语句create or replace procedure SHOW_SPACE(P_SEGNAME IN VARCHAR2, Oracl ...
- oracle 表空间管理
表空间是ORACLE数据库最高层次的逻辑存储结构,保存段.区.块,由一个或多个数据文件组成. 块的存储管理 块是ORACLE存储结构的最小单位.块大小分为标准数据块和非标准数据块 标准数据块由DB_B ...
- Oracle表空间管理和维护
1 表空间概念 在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段.区.块等逻辑结构.从物理结构上看是放在数据文件中.一个表空间可由多个数据文件组成.一个数据库由对 ...
最新文章
- 人工智能不仅仅是智能生活,还有失业问题!
- 如何利用 Arthas 热更新线上代码
- C++ 中使用 goto 编译通不过
- oracle合并查询
- java能否访问PHP的服务器,PHP与Java进行通信的实现方法
- oracle修改asm参数文件,学习笔记:Oracle RAC参数文件管理 修改创建asm中的spfile文件...
- i2c通信 msp430g2553_msp430g2553的IIC通信
- 20 Alarms, sigaction(), and Reentrant System Calls
- 解决办法:RuntimeError: dictionary changed size during iteration
- g4600黑苹果efi_Matebook 13/14 黑苹果 通用EFI分享amp;安装教程?
- 分数阶微积分基本理论(课堂笔记1)
- 筋斗云案例 - animate、transition都能实现
- echarts实现全国及各省市地图(内附地图json文件)
- 划区清扫功能 小米扫地机器人_小米扫地机器人怎么用?
- 人工智能内行盛会,错过再等一年!
- 平衡小车c语言程序,【全部开源】两轮平衡小车(原理图、PCB、程序源码、BOM等)...
- MATLAB中字符串数组的文件输出
- 新款趣味测试小程序源码_测试可用
- Pycharm实现645协议解析器(一)
- Java的getter_java动态调用getter方法
热门文章
- Oracle错误08s01,Java7 sqljdbc4 – getConnection()上的SQL错误08S01
- Python学习笔记3.2-python内置函数大全
- 基于S52单片机的温度测量与报警装置
- 2021-10-16windows系统还原点创建/查看/配置/删除
- Java匿名类习题_输出英文字母表和希腊字母表
- 使用 Promise 时的5个常见错误
- 为什么家里的wifi连接上但用不了
- zabbix 自动发现/自定义宏
- 程序员怎么留住健康?
- 2022年贵州二级建造师建设工程法规及相关知识模拟题及答案