Oracle数据库
- 1、数据库
- 2、数据库类型
- 3、Oracle
- 4、SQL语言
- 5、SQL函数
- 6、SQL语句
- 7、DML语言
- 8、事务
- 9、DDL语言
- 10、约束
- 11、视图
- 12、分页查询
- 13、序列
- 14、索引
- 15、同义词
- 16、创建用户
- 17、数据控制语言(DCL)
- 18、执行计划
- 19、Oracle的优化器
- 20、Oracle的数据导入与导出
1、数据库
数据库:数据的集合。
2、数据库类型
2.1 关系型数据库
- 数据结构是表,由二维表及其之间的联系所组成的一个数据组织,支持事务的一致性
- 优点
-
- 易于维护
-
- 使用方便
-
- 复杂操作
- 缺点
-
- 性能差
-
- 存储方式不灵活
Oracle
Mysql
PostgreSQL
DB2
Microsoft SQL Server
Microsoft Access
2.2 非关系型数据库
- 严格上不是一中数据库,是一种数据结构化存储方法的集合,可以是文档或者键值对。不支持事务一致性。
- 优点
-
- 格式灵活
-
- 高扩展性
-
- 速度快
- 缺点
-
- 不支持SQL
-
- 不支持事务
-
- 不支持复杂查询
Redis
Mongodb
Big Table
3、Oracle
3.1 Oracle数据库
所有的关系型数据库存储数据的集合就是磁盘中的文件。Oracle数据就是一组文件集合。Oracle分别由:数据文件、控制文件、日志文件
3.1.1 数据文件(.DBF)
3.1.2 控制文件(.CTL)
3.1.3 日志文件(.LOG)
3.2 Oracle实例
3.3 Oracle软件的介绍
3.3.1 Oracle 安装
3.3.2 Oracle的目录结构
3.3.2.1 admin
- 记录Oracle实例的配置,运行日志的文件,每个实例一个目录
- SID:System IDentifier的缩写,是Oracle实例的唯一标记,在Oracle中一个实例只能操作一个数据库。安装了多个实例,可以通过实例SID来区分,也会使用SID来作为库的名称
3.3.2.2 cfgtoollogs
存放当前运行dbca、emca、netca等图形化配置程序时的log
3.3.2.3 checkpoints
存放检查点文件
3.3.2.4 diag
新增加的一个重组目录,将Oracle每个组件所诊断出的log文件存放在了这个目录下
3.3.2.5 flash_recovery_area(闪回区)
分配一个特定的目录位置来存放一些特定的回复文件,用于集中和简化管理数据恢复工作。闪回区可存储完全的数据文件备份、增量备份、数据文件副本、当前的控制文件、备份的控制文件、spfile文件、快照控制文件、联机日志文件、归档日志、块跟踪文件、闪回文件
3.3.2.6 oradata
存放数据文件
CONTROL01.CTL
:控制文件
EXAMPLE01.DBF
:表空间文件
SYSAUX01.DBF
:存储除数据字典以外的其他数据对象。由系统内部自动维护
SYSTEM01.DBF
:存放Oracle系统内部表和数据字典的数据,如:表名、列名、用户名
UNDOTBS01.DBF
:撤销表空间文件,用来保存回滚数据
USERS01.DBF
:用户表空间
TEMP01.DBF
:临时表空间文件
REDO01.LOG
:重做日志文件1
REDO02.LOG
:重做日志文件2
REDO03.LOG
:重做日志文件3
3.3.2.7 product
Oracle RDBMS的软件存放目录。RDBMS即关系数据库管理系统(Relational Database Management System)。
3.3.3 Oracle的系统用户
3.3.3.1 sys
超级用户,权限最大,可以完成数据库的所有管理任务
3.3.3.2 system
没有sys权限大,创建一些用户查看管理信息的表或视图。不建议创建一些与管理无关的表或者视图
总结
:sys只能以系统管理员(sysdba)或系统操作员(sysoper)的权限登录,而system可以直接登录(normal)
3.3.3.3 scott
示例用户
3.3.4 Oracle的启动
Oracle是通过系统的服务来启动的
3.3.4.1 OracleServiceORCL
数据库服务(数据实例),数据库启动的基础
3.3.4.2 OracleOraDb11g_home1TNSListener
监听器服务,只有在数据库需要远程访问的时候或者使用PL/SQL、Developer等第三方工具时才需要
3.3.5 Oracle的关闭
OracleServiceORCL、OracleOraDb11g_home1TNSListener两者的服务停止即可
3.3.6 Oracle自带客户端工具
sys用户登录命令:sys as sysdba|sysoper
system用户登录命令:system
3.3.7 Oracle的使用
3.3.7.1 Oracle的表空间
- 永久表空间
表空间是数据的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的是表。 - 临时表空间
主要用来查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。重启数据库可释放临时表空间
3.3.7.2 创建永久表空间命令
create tablespace 永久表空间名称 datafile '永久表空间物理文件位置' size 15M autoextend on next 10M permanent online;
3.3.8 Oracle的链接配置
3.3.8.1 sqlnet.ora
- 名称解析。通过这个文件夹来决定怎么样找一个连接中出现的连接字符串
3.3.8.2 tnsnames.ora
- 用在oracle client端,用户配置连接数据库的别名参数
3.3.9 Oracle的数据类型
3.3.9.1 CHAR类型
- 定长字符串,会用空格填补来达到其最大长度。最多存储2000字节的信息,不指定CHAR长度,则默认为1
3.3.9.2 VARCHAR2类型
- 变长字符串,不会使用空格填补长度
3.3.9.3 NVARCHAR2类型
- UNICODE格式数据的变长字符串,最多可以存储4000字节的信息
3.3.9.4 NUMBER类型
- 可以表示整数类型,也可以表示浮点类型
3.3.9.5 INTEGER类型
- 存储整数类型
3.4 Oracle创建表
- 在创建表时,如果定义了特殊符号,两侧需要双引号。
- 表明不能超过30个字符
3.4.1 数据库的约束
3.4.1.1 主键约束
- 唯一性,非空性
3.4.1.2 唯一约束
- 唯一性,可以空,但只能一个
3.4.1.3 检查约束
- 对该数据的范围、格式的限制(如:年龄、性别等)
3.4.1.4 非空约束
- 该列不允许包含空值
3.4.1.5 外键约束
- 需要建立两表间的关系并引用主表的列
3.4.2 数据库表关系
3.4.2.1 一对多
- 一个表中的一条数据可以对应另一个表中的多条数据,外键永远在多方,外键允许重复,允许含有空值
3.4.2.2 一对一
- 一对一关系是建立在一对多的基础上,外键可以在任何一方,需要让外键一方具备唯一约束。
3.4.2.3 多对多
- 需要建立一个中间表,中间表里建立两个列,然后需要用这两个列作为这个表的联合主键,然后每个列在作为外键参照各自的表的主键
4、SQL语言
4.1 SQL语言结构
4.1.1 数据查询语言(DQL)
- SELECT、WHERE、ORDER BY、GROUP BY、HAVING
4.1.2 数据操作语言(DML)
- INSERT、UPDATE、DELETE
- 与事务有关
4.1.3 事务处理语言(TCL)
- commit(事务提交)、rollback(事务回滚)、savepoint(设置回滚点)
4.1.4 数据控制语言(DCL)
- 通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问
- grant:授予用户权限
- revoke:撤销用户权限
4.1.5 数据定义语言(DDL)
- create:创建数据库对象
- drop:删除数据库对象
- alter:修改数据库对象
- rename:修改数据库对象名称
4.2 DQL语言
- SELECT *|{[DISTINCT] column|expression [alias],…} FROM table;
- 空值是一个未分配的、未知的、或不适用的值,控制不是0,也不是空格
- 包含空值的算术表达式计算结果为空
- 列别名:紧跟列名后面,之间可用AS或空格分开,如果别名含有空格、特殊字符、大小写敏感,要求用双引号。
4.2.1 SELECT 语句中的算术表达式
- 对数字可以做* / + -运算,而日期(DATE、TIMESTAMP)只能做 + - 运算
- 运算符的优先级
4.2.2 连字运算符
- 连接列或者字符串到其他的列
- 用两个竖线表示(||)
- 列与列之间、列与算术表达式之间或者列与常数值之间的连接,来创建一个字符表达式。
4.2.3 文字字符串
- 文字字符串是包含在SELECT列表中的一个字符串,一个数字或者一个日期
- 日期和字符的文字字符串值必须用单引号括起来,数字不需要单引号。
- 每个文字字符串在每行输出一次
- 任意格式文本的文字字符串能够被包含在查询结果中
select last_name || ' is a ' || job_id as "Employee Details" from employees;
4.2.4 去除重复行
- DISTINCT关键字是去除相同的行;如果后面有多个列的字段,是对这几个列的结果集做去重。
4.2.5 选择限制行
- 用WHERE子句限制从查询返回的行
- WHERE子句紧跟着FROM子句的后面
- 条件为true,返回满足条件的行,如:WHERE 1=1;条件永远满足,所以查询的是所有数据。
- WHERE子句由三个元素组成
- 列名
- 比较条件
- 列名、常量或值列表
4.2.6 字符串和日期
- 字符串和日期的值放在单引号中
- 字符值区分大小写,日期值是格式敏感的
- 日期的默认格式是 DD-MON-RR
4.2.7 比较条件
- BETWEEN…AND…:实际上(a>=下限)AND(a<=上限),BETWEEN…AND…并没有性能的提高,只是逻辑上简单
- IN(SET):在指定的一组值中进行选择,实际上会转变为一组OR条件:a=value1 OR a=value2 OR a=value3,IN(…)并没有得到性能的提高
- LIKE:ESCAPE标识符搜索实际的%和_符号,如:LIKE ‘%SA_%’ ESCAPE ‘\’
select e.last_name,e.job_id from employees e where e.job_id like '%SA\_%' escape '\';
- IS NULL:空值测试
4.2.8 优先级规则
- 算术运算、连字操作、比较操作、IS [NOT] NULL,LIKE,[NOT] IN、[NOT] BETWEEN、NOT逻辑条件、AND逻辑条件、OR逻辑条件
4.2.9 ORDER BY排序
- ASC:升序排序,默认
- DESC:降序排序
- 对于空值,升序排序时显示在最后,降序显示在最前面
- 可以使用投影的列的序号指定排序列,但是不推荐此种做法。如:order by 1;1指的是第一个列名
- 可以使用列的别名排序
- 可以用多列排序查询结果,多个指定的列名之间用逗号分开,如果想要对某个列倒序排序需在该列名后面指定DESC
- SELECT语句的执行顺序如下:
- FROM子句
- WHERE子句
- SELECT子句
- ORDER BY子句
5、SQL函数
- 能够处理查询结果的方法
- dual是一张伪表,只有一个字段,一行记录的表
5.1 函数类型
5.1.1 单行函数
- 对单个行进行运算,并且每行返回一个结果
- 作用于每一个返回行,每行返回一个结果
- 可能需要一个或多个参数
- 可以修改结果集的数据类型
- 可以嵌套
- 可能返回一个与参数不同类型的数据值
- 能够用在SELECT、WHERE和ORDER BY子句中
5.1.1.1 字符函数
- 接受字符输入,返回字符或者数字值
-
UPPER():转化大写
-
LOWER():转化小写
-
INITCAP():每个单词的首字母转换为大写
-
CONCAT():连接值在一起
-
SUBSTR():截取子串
-
LENGTH():显示一个字符串的长度
-
INSTR():指定字符的数字位置
-
LPAD():给定的字符左填充字符串到给定的长度
-
RPAD():给定的字符右填充字符串到给定的长度
-
TRIM():去除头或尾或头尾两侧的字符
-
--去掉头尾两侧方法
select trim(both 'H' from 'HelloWorldH') from dual;
--去掉头
select trim(leading 'H' from 'HelloWorld') from dual;
--去掉尾
select trim(trailing 'H' from 'HelloWorldH') from dual;
+ REPLACE():用另外一个值替代字符串中的某个值
5.1.1.2 数字函数
- 接受数字输入返回数字值
- ROUND():四舍五入指定小数的值
- TRUNC():截断指定小数的值
- MOD():取余
5.1.1.3 日期函数
- 对DATE数据类型的值进行运算(除MONTHS_BETWEEN函数返回一个数字,所有日期函数都返回一个DATE数据类型的值)
-
SYSDATE是一个日期函数,它返回当前数据库服务器的日期和时间
-
从日期加或者减一个数,结果是一个日期值
-
两个日期相减,得到两个日期之间的天数
-
用小时除以24,可以加小时到日期上
-
MONTHS_BETWEEN()
-
ADD_MONTHS()
-
NEXT_DAY()
-
LAST_DAY()
-
ROUND()
-
TRUNC()
-
5.1.1.4 转换函数
- 从一个数据类型到另一个数据类型转换一个值
5.1.1.4.1 隐式数据类型转换
(1)、对于直接赋值转换
(2)、对于表达式赋值
(3)、隐式转换的问题
性能影响
不便于阅读
5.1.1.4.2 显示数据类型转换
(1)、日期到字符的转化
- TO_CHAR()
(2)、数字到字符的转化
+ TO_NUMBER()
- TO_DATE()
5.1.1.4.3 函数嵌套
--方法一:(推荐使用)
select to_char(next_day(add_months(e.hire_date,6),6),'DY","MM","dd","yyyy') "Next 6 Month Review" from employees e;
--方法二:
select to_char(next_day(e.hire_date,'星期五'),'DY","MM","dd","yyyy') "Next 6 Month Review" from employees e where months_between(sysdate,e.hire_date) > 6;
5.1.1.5 通用函数
- 可用于任意数据类型,并且适用于空值
-
NVL():转换一个控制到一个实际的值
-
NVL2():等价于三元运算符,注意:expr1、expr2、expr3的类型要一致,可以避免隐式转化带来的问题
-
NULLIF()
-
COALSECE()
-
5.1.1.6 条件表达式
- CASE()
- 示例:
- DECODE()
- 示例:
5.1.2 多行函数(组函数)
-
又叫聚合函数
-
操纵成组的行,每个行组给出一个结果。这些函数称为组函数。
-
组函数可以嵌套
-
组函数与单行函数区别
-
使用组函数原则
-
如果组函数,投影的列必须是分组的列
5.1.2.1 AVG 平均值
5.1.2.2 SUM 合计
5.1.2.3 COUNT 计数
- COUNT(*):返回结果集的总条数
- COUNT(expr):返回在列中的由expr指定的非空值的数
- COUNT(DISTINCT expr):使用DISTINCT关键字禁止计算在一列中的重复值
5.1.2.4 MIN/MAX 最小值/最大值
5.1.2.5 组函数和Null值
- 所有组函数忽略列中的空值
- 在组函数中使用NVL函数处理空值
SELECT avg(nvl(e.COMMISSION_PCT,0) )FROM EMPLOYEES e ;
5.1.2.6 创建数据组(GROUP BY)
- 将查询到的结果集信息划分为较小的组,用GROUP BY子句实现
5.1.2.7 约束分组结果(HAVING)
6、SQL语句
- 表别名:简化查询语句的长度,节省内存,在整个查询语句都可以使用表别名
6.1 多表查询
- 全外连接Oracle有,MySQL没有
6.1.1 多表连接
- SQL86的语法结构
6.1.1.1 等值连接
- 简单连接或内连接,是通过等号来判断连接条件中的数据值是否相匹配。
- 抉择矩阵
6.1.1.2 自连接
- 使用一个表连接它自身的操作
SELECT e.LAST_NAME worker,m.LAST_NAME manager FROM EMPLOYEES e ,EMPLOYEES m WHERE e.MANAGER_ID = m.EMPLOYEE_ID ;
6.1.1.3 外连接
-
SQL99外连接语法
-
Oracle扩展的外连接,Oracle特有的语法格式
SELECT e.LAST_NAME ,d.DEPARTMENT_NAME FROM EMPLOYEES e ,DEPARTMENTS d WHERE e.DEPARTMENT_ID = d.DEPARTMENT_ID(+) ;
6.1.1.4 交叉连接
- SQL99交叉连接
--笛卡尔积
--方式一:
SELECT * FROM EMPLOYEES e ,DEPARTMENTS d ;
--方式二:
SELECT * FROM EMPLOYEES e CROSS JOIN DEPARTMENTS d ;
6.1.1.5 自然连接
- SQL99自然连接
注意
:在性能上,自然链接和等值连接是没有区别的
--等值连接
SELECT * FROM DEPARTMENTS d ,LOCATIONS l WHERE d.LOCATION_ID = l.LOCATION_ID ;
--自然连接
SELECT * FROM DEPARTMENTS d NATURAL JOIN LOCATIONS l ;
6.1.1.6 USING子句创建连接
- 示例:
SELECT d.DEPARTMENT_NAME ,l.CITY FROM DEPARTMENTS d JOIN LOCATIONS l USING(LOCATION_ID) WHERE LOCATION_ID = 1800;
6.1.1.7 内连接
- SQL99内连接
--等值连接
SELECT e.LAST_NAME ,d.DEPARTMENT_NAME ,l.CITY FROM EMPLOYEES e,DEPARTMENTS d ,LOCATIONS l WHERE e.DEPARTMENT_ID = d.DEPARTMENT_ID AND d.LOCATION_ID = l.LOCATION_ID AND e.EMPLOYEE_ID = 202;
--内连接
SELECT e.LAST_NAME ,d.DEPARTMENT_NAME ,l.CITY FROM EMPLOYEES e INNER JOIN DEPARTMENTS d on(e.DEPARTMENT_ID=d.DEPARTMENT_ID) INNER JOIN LOCATIONS l ON (d.LOCATION_ID = l.LOCATION_ID) WHERE e.EMPLOYEE_ID = 202;
SELECT e.LAST_NAME ,d.DEPARTMENT_NAME ,l.CITY FROM EMPLOYEES e INNER JOIN DEPARTMENTS d using(DEPARTMENT_ID) INNER JOIN LOCATIONS l USING(LOCATION_ID) WHERE e.EMPLOYEE_ID = 202;
6.2 子查询
- 子查询是一个SELECT语句,它是嵌套在另一个SELECT语句中的子句
- 子查询(内查询)在主查询之前执行一次
- 子查询的结果被用于主查询(外查询)
- 子查询可放在:WHERE子句中、HAVING子句中、FORM子句中
6.2.1 单行子查询
- 单行子查询:子查询语句只返回一行的查询,使用单行比较符(=、>、>= 、<、 <=、<>)
6.2.2 多行子查询
- 多行子查询:子查询语句返回多行的查询,
- 使用多行比较符
- IN :等于列表中的任何成员
- ANY :比较子查询返回的每个值;< :小于最大值;> :大于最小值
- ALL :比较子查询返回的全部值;< :小于最小值;> :大于最大值
区别
:
- ANY :> ANY 表示至少大于一个值,即大于最小值
- ALL :> ALL表示大于每一个值,即大于最大值
注意
:在条件中也可使用NOT取反
7、DML语言
- 跟事务有关,需要commit才能完成数据的操作
7.1 INSERT语句
- 指定列添加,要求其他列不能有非空约束
INSERT INTO DEPARTMENTS (DEPARTMENT_ID,DEPARTMENT_NAME,LOCATION_ID) values (291,'Development',2000);
- 完全列添加,插入列的数据必须跟表中列名顺序要一致
INSERT INTO DEPARTMENTS values(290,'Development',149,2000);
- 插入带空值的行,前提是字段列允许有空值才可
- 隐式方法:省略字段列表中的列
- 显示方法:在VALUES子句中指定NULL关键字
- 插入日期值:1)自定义的日期格式要符合Oracle默认格式。2)to_date(2021-03-04’,‘yyyy-MM-dd’)
- 从另一个表中复制行
- 用一个查询写insert语句
- 不用values子句
- 在查询中列的数目要匹配insert子句中列的数目
--方式一
INSERT INTO emp (id,name,salary,commission) SELECT e.EMPLOYEE_ID ,e.LAST_NAME ,e.SALARY ,e.COMMISSION_PCT FROM EMPLOYEES e WHERE e.JOB_ID like '%REP%';
--方式二:插入的数据要与表的投影列顺序要一致
INSERT INTO emp SELECT e.EMPLOYEE_ID ,e.LAST_NAME ,e.SALARY ,e.COMMISSION_PCT FROM EMPLOYEES e WHERE e.JOB_ID like '%REP%';
- 使用默认值:在INSERT中的DEFAULT
- 如果有默认值,只需给字段名的value可赋为default,
7.2 UPDATE语句
7.3 DELETE语句
8、事务
8.1 事务的特性
-
原子性
-
一致性
-
隔离性
-
持久性
8.2 事务的操作
- commit:事务提交
- rollback:事务回滚
- savepoint:设置回滚点
- savepoint
- rollback to
INSERT INTO values(1,'bjsxt',3000,null);
SAVEPOINT A;
INSERT INTO emp values(2,'oldlu',4000,null);
SAVEPOINT B;
DELETE FROM emp;
ROLLBACK TO A;
8.3 事务的类型
- 显示事务:手动提交或回滚
- 隐式事务:自动提交不需要任何处理,同时也不具备回滚性,DDL、DCL语言都是隐式事务操作
9、DDL语言
9.1 CREATE TABLE 语句
- 查看数据字典表:USER_TABLES
SELECT table_name FROM USER_TABLES;
- 查看本用户所拥有的不同的对象类型
SELECT DISTINCT object_type FROM user_objects;
- 查看本用戶所拥有的表、视图、同义词和序列
SELECT * FROM user_catalog;
- 查询创建表
CREATE TABLE dept80 AS SELECT e.EMPLOYEE_ID ,e.LAST_NAME name,e.SALARY ,e.HIRE_DATE FROM EMPLOYEES e ;
9.2 ALTER TABLE 语句
- 添加一个新的列
- 修改一个列
- 删除一个列
ALTER TABLE dept DROP COLUMN salary;
- 修改列名
alter table dept rename column olddname to newname;
- 修改表名(RENAME)
RENAME dept80 TO dept90;
- 截断表(TRUNCATE TABLE):1)表结构不会被删除,只删除表中的数据;2)截断表时不能给定条件;3)截断表是隐式事务
TRUNCATE TABLE dept90;
- 删除表(DROP TABLE):1) 删除表结构和数据;2)隐式事务
DROP TABLE dept90;
10、约束
- 定义约束原则
10.1 非空约束
10.2 唯一约束
10.3 主键约束
- 表中只允许具有一个主键,但可以联合主键
create table dept50(id number,name varchar2(20),constraint dep50_pk primary key(id,name));
10.4 外键约束
- 添加约束
alter table dept50 add constraint dept50_fk foreign key(d_id) references dept60(id);
10.5 自定义约束
- 添加自定义约束
alter table dept50 add constraint dept50_ck check(salary > 1000);
10.6 禁用和启用约束
- 查看约束
- 禁用约束
- 启用约束
11、视图
- 视图的优越性
- 视图类型
11.1 创建简单视图
11.2 创建复杂视图
11.3 视图DML操作
- 简单视图可以DML操作,复杂视图不可以DML操作
- 拒绝DML操作:语句后加 with read only
- 删除视图
11.4 内建视图
11.5 Top-N分析
SELECT rownum,LAST_NAME ,SALARY FROM (SELECT e2.LAST_NAME ,e2.SALARY FROM EMPLOYEES e2 ORDER BY salary DESC) WHERE ROWNUM <= 3;
12、分页查询
--查询前十条数据
SELECT * FROM (SELECT rownum rn,e2.* FROM EMPLOYEES e2) em WHERE em.rn >= 1 AND em.rn <= 10;
13、序列
13.1 DDL创建序列
13.2 查询序列
SELECT test_seq.nextval FROM dual;
SELECT test_seq.currval FROM dual;
SELECT test_seq.nextval FROM dual;
SELECT test_seq.currval FROM dual;
13.3 修改与删除序列
- 修改序列
- 修改序列原则
- 删除序列
14、索引
14.1 索引类型
14.2 创建索引
- 创建索引
- 不创建索引
14.3 操作索引
- 非唯一性索引:单行索引、复合索引(组合索引)、函数索引
- 单行索引
--包含一个列
CREATE INDEX emp_index ON employees(last_name);
- 复合索引
--包含两个或两个以上的列
CREATE INDEX dept_man_loc ON departments (manager_id,locatime_id);
- 函数索引
CREATE INDEX dept_upper ON departments(upper(department_name));
SELECT * FROM DEPARTMENTS d WHERE upper(d.DEPARTMENT_ID) = 'AAAA';
14.4 查询索引
SELECT ic.INDEX_NAME ,ic.COLUMN_NAME ,ic.COLUMN_POSITION , un.UNIQUENESS FROM user_indexes un,user_ind_columns ic WHERE un.index_name = ic.INDEX_NAME AND ic.TABLE_NAME = 'DEPARTMENTS';
14.5 删除索引
15、同义词
16、创建用户
- Oracle用户是用来连接数据库和访问数据库对象的
- 使用sys或者system用户来创建新用户
- 使用指定表空间
CREATE USER u_bjsxt IDENTIFIED BY oracle DEFAULT TABLESPACE bjsxt TEMPORARY TABLESPACE temp;
- 删除用户
drop user u_test;
- 删除用户的同时将该用户下的其他对象一并删掉
DROP USER u_test cascade;
17、数据控制语言(DCL)
- grant:授予用户权限
- revork:撤销用户权限
17.1 授予系统权限
- 可以给用户授予的权限
--给用户赋予权限
GRANT CREATE TABLE,CREATE VIEW,CREATE SEQUENCE,unlimited tablespace TO u_user;
17.2 撤销系统权限
- revoke 权限 from 用户
--撤销用户创建表的权限
revoke create table from u_user;
17.3 创建角色
- 给角色授予权限
- 授予角色给用户
CREATE ROLE manager;
GRANT CREATE SESSION,CREATE TABLE ,CREATE VIEW ,CREATE SEQUENCE TO manager;
CREATE USER newbj IDENTIFIED BY oracle DEFAULT tablespace bj;
--不限表空间只能授予用户,不能授予角色
GRANT unlimited tablespace TO newbj;
GRANT manger TO bj;
- 撤销用户角色
revoke manager from newbj;
18、执行计划
-
执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述
-
TABLE ACCESS FULL(全表扫描)
-
TABLE ACCESS BY INDEX ROWID(通过ROWID的表存取)
-
TABLE ACCESS BY INDEX SCAN(索引扫描)
- 索引扫描分两步
- 五种索引扫描
- 索引唯一扫描
- 索引范围扫描
- 索引全扫描
- 索引快速扫描
- 索引跳跃扫描
- 索引唯一扫描
- 索引扫描分两步
18.1 执行计划的使用
- 单表
- 分析查询表中的所有数据
- 分析主键作为条件的查询
- 分析非主键列作为查询条件
- 分析like条件
- 分析非唯一性索引列作为条件的查询
- 分析非唯一性索引中=、>、<、<>条件
- 分析创建索引中=、>、<、<>条件(=、<走索引,而>、<>不走索引)
- 分析查询表中的所有数据
- 多表
-
内连接:等值连接
-
内连接:子查询
-
外连接
-
19、Oracle的优化器
-
RBO(Rule-Based Optimization) 基于规则的优化器
-
CBO(Cost-Based Optimization)基于代价的优化器
20、Oracle的数据导入与导出
- 导入导出数据库需要注意
- 导出数据格式
20.1 传统方式exp(导出)和(imp)导入
- 命令执行方式
- 需要在操作系统的命令窗口执行,而非sql/plus
- 使用导出或导入命令时,在命令的后侧不要添加分号
- 命令格式
- 导出命令
--导出命令
exp HR/HR@localhost:1521/orcl file=c:/1.dmp
- 导入命令
--导入命令
imp HR/HR@localhost:1521/orcl file=c:/1.dmp