Oracle学习笔记

目录

 第一章 基本概念

数据库设计过程

数据库选择

需求

概念结构设计

第二章 Oracle体系结构

内存

数据库创建

启动数据库

查看当前账号

连接数据库

账号加锁、解锁

断开数据库

查询当前账号下的所有表

查看表结构

设置页面宽度

设置表格每页显示的行数

查询语句的基本格式

在缓冲区里进行修改操作

修改密码

密码失效

文件操作

将屏幕内容保存到文件中

清屏(把屏幕清空)

帮助命令

环境变量的设置与显示

基本环境变量

 第三章查询

1.查询所有信息

2.算术运算符

3.空值:无效的,未定义的

4.列的别名

5.连接符||

6.去掉重复行 DISTINCT

7.排序

8.过滤查询

9.比较运算符

10.逻辑运算符

第四章函数

字符函数

1.大小写控制函数:

2.字符控制函数:

3.数值函数

4.日期函数

转换函数

通用函数

第五章PL/SQL 基础

代码块实现形式:

SQL语句分类:

PL/SQL代码块结构:

标识符:

注释:

数据类型:

定义变量的语法:

第六章插入

插入单值

向多个表中插入数据

修改

删除

截断表

第七章

格式化

压缩列

设置标题和页脚

层次查询

第八章表的操作

数据类型

建表 

删除表

修改表

表的重命名

第九章约束和视图

约束

追加约束

删除约束

约束的禁用和启动

查看约束

视图

删除视图

查看视图

 

第十章同义词和序列

同义词

创建同义词

删除同义词

序列

语法格式

伪列

修改序列

删除序列

ROWID 伪列

第十一章索引index

创建索引

测试索引

删除索引

索引缺点

第十二章用户

Oracle数据库的初始用户

用户属性(安全参数)

创建用户(不能执行任何操作)

修改账号

删除用户

查询用户

第十三章权限管理

分类:

系统权限:

注意事项

语法格式

授权的传递

权限的回收

对象权限,级联回收

1)对象权限的授予

2)对象权限的回收

查询权限信息

第十四章角色管理

(1) 系统预定义角色

(2) 用户自定义角色

1)创建角色

2)角色权限的授权与回收

3)修改角色

4)角色的生效与失效

5)删除角色

利用角色进行权限管理

(1)给用户或角色授予角色

2) 从用户或角色回收角色权限

3)用户角色的激活或屏蔽

4)查询角色信息

第十五章概要文件

1)创建概要文件 

2) 将概要文件分配给用户

3)删除概要文件

4)查询概要文件

 

 


笔试+平时分(考勤+上机+作业)30分

 

 第一章 基本概念

需求分析(重点,调查情况)+概念结构设计+逻辑结构设计+物理结构设计+运行+维护 

SQL server 安全性不是很好,登录的时候密码是星号,不能防星号探测器。
安全:QRACLE,输入密码的时候不显示,对系统的依赖比较强,速度比较慢,适合大型项目,推荐12c,10j版本,最新版是17c版,此版针对云端存储,下载和上传比较耗时。
MySQL,适合小型项目,被Qracle收购了,5.6版本之后,偏向于服务器和云端。

隐性需求:在文档中没有明确表示,但是可以分析出来
显性需求:在文档中有明确表示

确定系统边界

需求分析的重点
重点是调查、收集与分析用户在数据管理中的信息要求、处理要求、安全性与完整性要求
分析需求的方法:自顶向下的结构化分析方法(SA),从最上层的系统组织结构入手,采用逐层分解的方式分析系统,用数据流图(只要看懂就可以,不要求会画)和数据字典描述系统。 

如何画数据流图
“由外向里”即先确定系统的边界或范围,再细化。

  1. 数据库设计过程

  2. 数据库选择

  3. 需求

  4. 概念结构设计

方法:自顶向下,自底向上,逐步扩张

混合策略:自顶向下和自底向上的结合,是四个方法中最难的。在一些情况下,需要把子需求加入整个系统,此时就是混合策略。

视图的集成
冲突的种类:属性冲突(数据库迁移的时候,属性的不一致,如字段大小不一致)、命名冲突、结构冲突
冗余:冗余的数据是指可由基本数据导出的数据,冗余的联系指可由其他联系导出的联系,冗余会导致搜索变慢,但并不是所有冗余都需要消除。
消除冗余的方法:加约束(如外键、主键)
优化:常常用范式

物理设计

Oracle不要使用Win 8,Win 8 家庭版系统不全,如果是Win 10 最好装12c。Win 7 XP可以装10j,除了安全性不是特别好,其他的功能都不错。安装Oracle最好电脑有两个盘,每个盘留2G空白。

数据库的实施包括:
用DDL定义数据库结构
组织数据入库
编制与调试应用程序
运行与维护

第二章 Oracle体系结构

Oracle服务器由Oracle实例和Oracle数据库组成
实例名(SID)最多可以包含8个字符,在所处的服务器上必须唯一

内存


系统全局区:块缓冲区、重做缓冲区(即重做日志缓冲区,对日志的刷新重做)、共享池(数据的公用区域)、固定SGA,大池(即stream池,数据库流操作),Java池(java的代码数据)
进程全局区:用户进程、服务器进程(连接Oracle实例),后台进程,其他进程(10g中,新增了ARB、ASMB、CTWR……了解即可)
用户全局区

Oracle监听器:运行于Oracle数据库服务器上的进程,其职责是监听来自于客户应用的连接请求。


数据库创建

名字要全部用字母。
账号
超级管理员:sys            默认密码:change_on_install
普通管理员:system     默认密码:manager
普通用户:sysman        默认密码:tiger
11j之后的版本起的口令必须包括:小写字母、大写字母、数字
快速恢复区大小
示例方案最好不要勾上
如果防火墙没关,创建数据库时肯会卡住
如果弹出,EM无法打开的窗口,则直接关掉忽略即可,因为如果是克隆出来的系统就会报错

启动数据库

Sqlplus 用户名/密码    (如果是超级管理员要加上)AS SYSDBA
如果输入AQLPIUS 用户名/密码以后报错,则要去找环境变量,或者改成SQLPLUS.exe 用户名/密码 
连接库:Sqlplus 用户名/密码@(库名)【库是用来干什么的?】 

  1. DOS命令行
  2. 图形化界面方式(SQLpuls)
  3. dos命令与图形化操作的转换

  sqlplusw 用户名/密码    (如果是超级管理员要加上)AS SYSDBA

查看当前账号

Show user

连接数据库

Conn 用户名/密码 [AS SYSTEM]

账号加锁、解锁

Alter user 用户名 ACCOUNT lock|unlock
锁定账号以后账号就不能用了
普通管理员不能进行加解锁

断开数据库

disconnect(或disc)

查询当前账号下的所有表

Select * from tab

查看表结构

Desc(或discribe) 表名
Emp 表 雇员表
EMPNO  雇员编号
ENAME 雇员姓名
JOB  雇员岗位
MGRHIREDATE 受雇日期
SAL 基本工资
COMM 补助
DEPTNP 部门编号

设置页面宽度

(防止列数太多,因为行宽有限而串行)

Set linesize 宽度
DOS命令下运行时,需要先通过属性调整黑框大小
图形化界面就不会有问题

设置表格每页显示的行数

(不是记录数)

Set pagesize 行数

查询语句的基本格式

Select 列名1,列名2,列名3……….from 表名
如 select ename,job from emp

在缓冲区里进行修改操作

(使用缓冲区可以让修改命令更简便)

编辑缓冲区: ed(或edit)
                       append 
                       del 删除缓冲区内容

执行缓冲区: R(或run)会显示缓冲区的内容
                       / 不会显示缓冲区的内容  

查看缓冲区: l(或list)  

清空缓冲区:clear buffer

修改密码

Alter user 用户名 identified by 新密码
Password 用户名  (输入此命令后,会弹出修改的窗口)

密码失效

Alter user 用户名 password expired

文件操作

  • 1.创建脚本文件

Save 文件地址(默认为create,但是可以不写)
Save 文件地址 replace   (更换脚本文件)
Save 文件地址 append  (内容追加)

  • 2.脚本文件的装载

Get 脚本文件
Get 文件 nolist (装载的时候,不显示缓冲区内容)
如果文件是.sql的后缀,则文件的后缀可以省略
如果是其他类型的文件,则必须加后缀,如ab.txt

  • 3.脚本文件的执行(装载并执行)

Start 文件
或  
@ 文件(用@方式更好,只能在sqlpuls内部执行)

  • 4.注释

a)单行注释:
//
b)多行注释:
/*注释内容
注释内容*/
c)remark:单行注释,放在一行语句的头部
 

将屏幕内容保存到文件中

Spool 文件名(保存到的文件中)
……(指令)
Spool off

清屏(把屏幕清空)

清除屏幕内容及屏幕缓冲区(不同于内存缓冲区)

  1. 通过指令Clear screen(可以简写cle scr)
  2. shift+delete快捷键

帮助命令

Help 命令(会把一个指令的的用法显示出来)

环境变量的设置与显示

Show 命令(显示环境变量)
如:show linesize
Set 命令(设置环境变量)
如 set autocommit on

基本环境变量

  1. autocommit:是否自动提交DML语句
  2. colsep:设置列之间的间隔符。如 set colsep |   (列与列之间用|间隔)
  3. feedback:显示反馈信息的最低行数,默认值是6,只有当表超过6行,才会显示“已选择X行”,否则不显示
  4. heading:是否显示列标题。如:set heading off (不显示列标题) 或on(显示列标题)
  5. time:命令提示符之前显示时间。如果设置了时间,则会变成10:15:11 SQL>
  6. timing:设置是否显示执行SQL语句所用的时间
  7. 环境变量的备份:store set 文件
  8. arravsize:设置从数据库中提取的行数。默认值是15

 第三章查询

Select 列名1,列名2…… from 表名

1.查询所有信息

Select 所有列名 from 表名(执行速度比较快,尽量用这个)
Select * from 表名
虽然SQL不区分大小写,但规范来说,SELECT,FROM等关键字要大写
规范来说,要分行,如:
SELECT 列名
FROM 表名

2.算术运算符

尽量用12*sal,把常量写在前面,效率较高。Sal*12效率会较低。
时间数据也可以进行加减


3.空值:无效的,未定义的

空值不能进行算数运算操作
对空值的操作函数:Nvl(可能产生空值的列,指定值)将空值变为指定值,之后就可以进行运算操作
如:sal+nvl(comm,0)


4.列的别名

Select 列名1【as(可省略)】列别名1, 列名2 列别名2
关键字不能用关键字,除非加上双引号  如 SELECT 列名 "FROM" FROM  表名
如果写成 列名 AS(没有写别名)  则列名变为 列名AS
如果写成 列名 AS " "(双引号内必须有空格) 则列名变为空
标准写法是要把别名加双引号


5.连接符||

a.列与列之间的合并
如 SELECT empno||ename FROM emp;
则会出现类似7369SMI的结果
b.列与字符[串]的合并(用单引号表示字符串)
如SELECT 'id:'||empno||',name is'||ename FROM emp


6.去掉重复行 DISTINCT

注意:
只能放在第一列的前面
如 SELECT distinct job 
FROM emp
但是SELECT ename distinct job 
FROM emp 会报错


7.排序

SELECT 列名1
FROM 表名
PRDER BY 排序列名1  [ASC]
(升序,可以不写,因为是默认的)或DESC(降序), 排序列名2 ASC或DESC


8.过滤查询

SELECT 列名
FROM 表名
WHERE 过滤条件(如:sal>1800)
ORDER BY 排序列名 

查询语句不区分大小写,但是数据库里的数据是区分大小写的

9.比较运算符




>= 
<= 
<> 或 !=

10.逻辑运算符

AND
OR
NOT
BETWEEN   AND
IN(写成IN[5,20]在此区间范围内)
LIKE:%:任意个数的任意字符
_:表示一个字符
IS NULL 

AND:如:查询工资大于200,并且小于2000的人的信息
SELECT * 
FROM emp
WHERE sal>800 AND sal<2000

BETWEEN AND:如:查询工资在[800,2000]的人的信息
SELECT * 
FROM emp 
WHERE sal BETWEEN 800 AND 2000

IS NULL:如:查询没有补助的人的所有信息
SELECT *
FROM emp
WHERE comm IS NULL

LIKE:如:
SELECT *
FROM emp
WHERE ename LIKE "_A%"

NOT:取反操作:
查询有补助的人的信息:
Select * from emp where comm is not null

工具:PLSQL Developer
可以方便地修改指令,但是最匹配的版本是Oracle 10j

第四章函数

  • 单行函数:字符、数值、日期、转换、通用
  • 多行函数

字符函数

1.大小写控制函数:

lower【所有字母转换为小写】
upper【所有字母转换为大写】如:select upper("hello,world") from dual
initcap【每个单词第一个字母为大写,之后的为小写】

2.字符控制函数:

concat(列名1,列名2)【连接两个列,如果多个列连接,需要嵌套concat(x,concat(x))】【不能嵌套超过三次】
substr('字符串',截取开始处的位置,截取结束处)
Length('字符串')【求长度】
Inster('母串','需查找的子串')【查找字符串的位置】
Lpad(列名,数据的长度,填充符号)从左边开始填充
rpad(列名,数据的长度,填充符号)从右边开始填充

3.数值函数

Round四舍五入
Trunc
mod(10,3)得数为1,求余数

4.日期函数

Sysdate 系统当前日期
日期的算数运算
日期+-数字=日期
日期+-日期=天数(得出来的天数不是整数,因为还要考虑时分秒)
天数/7=周数
Months_between(日期一,日期二)两个日期之间相差的月份
Add_months(日期,月份) 在指定日期上加上月份
Next_day
Last_day
Extract

转换函数

To_date
To_char
To_number

通用函数

Nvl
Nvl2
Decode

第五章PL/SQL 基础

(两类语句,一种是SQL,一种是PL(过程化语言,循环判断等))

SQL:关型数据库

NOSQL:弥补SQL的缺陷,处理非关型数据库,可以用多台数据库处理
SQL和NOSQL互相补充

PL/SQL效率更高,网络传输的数据量少很多。可以写段代码放到数据库里,是预编译的
可以写五种代码块:匿名块、过程、函数、触发器(满足触发条件会自动执行)、包(后四种为命名块)
就算所在的操作系统不一样,程序也不用改

 

代码块实现形式:

1.只执行一次永不存储(匿名块)
2.存储在数据库中以备后用的块(命名块)

SQL语句分类:

1.查询
2.DDL:数据库模式定义语言,如建表,删除表
3.DML:以INSERT、UPDATE、DELETE三种指令为核心,数据操纵语言
4.事物:提交回滚
5.DCL:授权,回收权限
其中,查询、DML、事物可以写在PL/SQL中,因为这些语句是静态的。而PL/SQL是预编译的,所以动态的语句不可以写在PL/SQL中(编译的时候值确定不了)

PL/SQL代码块结构

BEGIN
    NULL;
END;

声明部分

DECLARE
    v_date DATE;
执行部分:(下节课会有例子)
异常处理部分:
EXCEPTION
    WHEN OTHERS
    THEN
        DBMS_OUTPUT.    


标识符:

长度只能30
只能字母开头
只能包含以下三个特殊符号_ $ #
不能有Oracle的标识符 

注释:

单行注释:--
双行注释/**/

数据类型:

标量类型(不可以拆分,用得最多)
字符/字符串类型

数字
布尔
日期/时间

 

复合类型
记录
嵌套表
Index-by表
Varrays
对象类型

定义变量的语法:

1.变量名 [constant(如果写了这个,表示是常量)]  type  [not null(如果写了这个,则一定要赋初值] [:=value(用于赋初值)]

2.变量名  其他变量名%type  (这样可以保证此变量名和其他的变量名的类型一样)(多数是这样命名)

第六章插入

 

插入单值

(1)标准写法(推荐)
INSERT INTO 表名(列名,列名……) VALUE是(值1,值2)
(2)省略写法(不推荐)
INSERT INTO 表名 VALUE
(3)利用select语句
INSERT INTO(SELECT empno,ename FROM myemp1)VALUES(1,TOM’)
(4)利用临时表
INSERT INTO myemp1(empno,ename)SELECT 2,‘allen’FROM dual;
(5)利用子查询插入数据(批量)
INSERT INTO myemp1 SELECT * FROM emp;

针对大量的数据,最好采用的不写入日志文件中,因为这样可以提高执行效率,想要实现此操作,要通过/*+APPEND*/
如:INSERT /*+APPEND*/ INTO myemp(empno,ename,sel,job)SELECT empno,ename,sal,jobFROM emp;

向多个表中插入数据

(1)无条件多表插入(数据备份最笨的做法)
INSERT ALL
INTO 表1 VALUES(列1,列2,……)
INTO 表1 VALUES(列1,列2,……)
……
子查询

(2)有条件多表插入(常用来建立分区表,以提高查询效率)
INSERT ALL或者FIRST(FIRST用于当有重复的数据时,只会插入到较前面的语句的表里)
WHEN 条件1 THEN INTO 表1(列1,列2,……)
WHEN 条件2 THEN INTO 表1(列1,列2,……)
……
ELSE INTO 表n(列1,列2,……)
子查询


例子:
INSERT FIRST
WHEN deptno=10 THEN INTO emp10
WHEN deptno=20 THEN INTO emp20
WHEN deptno=30 THEN INTO emp30
ELSE INTO emp_other
SELECT * FROM emp;

(3)多表插入的应用

非关型数据库转换为关型数据库
列转化为行
INSERT ALL
INTO sale_into VALUES(emp_id,week_id,sale_MON)
INTO sale_into VALUES(emp_id,week_id,sale_TUE)
INTO sale_into VALUES(emp_id,week_id,sale_WED)

修改

全部修改:UPDATE 表名 SET 列=值,列=值,……
局部修改:UPDATE 表名 SET 列=值,列=值,…… WHERE 条件;

删除

全部删除:DELETE FROM 表名
局部删除:DELECT FROM 表名 WHERE 条件

增加、修改、删除,最后必须要加上事务处理操作

截断表

Truncate table 表名
在别的数据库中 ,table可以省略,但是在关系型数据库中,不可以省略

Rownum:表示行号,但它是一个伪列
一般用来做分页的操作

第七章

格式化

Col【umn】命令
Heading 设置列标题
Justify 
Clear
Format 设置格式 (L9999.99,L代表人名币的符号,9999.99代表数字的格式,为保留两个小数)

Column ename heading 员工名 justify center format a7(a表示显示宽度,7代表几个字符)

压缩列

(做分组操作)(重复列值的显示)

BEARK ON 列名 【SKIP 值】

BREAK ON deptno SKIP 1;
SELECT deptno,ename,sal FROM emp ORDER BY deptno;

为了实现组函数的分组统计操作,可以与compute命令组合使用

COMPUTE 组函数 LABEL 标签内容 OF 列 ON 分组条件

BREAK ON deptno;
COMPUTE AVG LABEL '平均工资' OF sal ON deptno;
SELECT deptno,ename,sal FROM emp ORDER BY deptno;

设置标题和页脚

TTITLE标题

BTITLE页脚

TTITLE/BTITLE OFF删除设置

层次查询

SELECT [LEVEL],列名

FROM 表名

[WHERE 条件]

[START WITH 列名=值]

[CONNECT BY PRIOR 关系 ]

SELECT Ipad (' ',3+LEVEL-1)||empno EMPNO, Ipad (' ',3+LEVEL-1)||ename ENAME
FROM emp
START WITH empno=7839
CONNECT BY PRIOR empno=mgr;

 格式化语句不可以在PL/SQL Developer里使用

第八章表的操作

数据类型

Char字符串
Varchar2可变字符串
Date日期
Number

Number(6)

Number(6,2)

Clob/Blob 

CLOB用来存储大量文本数据的;BLOB是用来存储大量二进制数据的

 

建表 

语法格式:(表和表之间必须要有关联)

CREATE TABLE 表名(

         列1 数据类型 【default 默认值】,

         列2 数据类型 【default 默认值】,

         ······)

删除表

把表放进回收站里面,查不到数据但是还存在于表列表中Drop table 表名;  

从回收站里面恢复表,只能恢复最近的,不能全部恢复

FLASHBACK TABLE 表名 TO BEFORE DROP;
从回收站里彻底删除PURGE TABLE 表名;
查看回收站里的表SELECT object_name, original_name,operation,type FROM recyclebin;  
清空回收站PURGE recyclebin;  
删除表(不经过回收站)Drop table 表名 PURGE;  

 

修改表

1)增加列

ALTER TABLE 表名 ADD(列名1 数据类型 【DEFAULT 默认值】,列名2 数据类型 【DEFAULT 默认值】······);

2)修改列的数据类型和长度     非空约束

ALTER TABLE 表名 MODIFY(列名1 数据类型 【DEFAULT 默认值】,列名2 数据类型 【DEFAULT 默认值】······);

3)修改列的名字

ALTER TABLE 表名 RENAME COLUMN 现列名 TO 新列名;

4)删除列

ALTER TABLE 表名 DROP COLUMN 列名;

5)修改列的无效状态  (等同于删除)

ALTER TABLE 表名 SET UNUSED COLUMN 列名;

6)删除无效的列

ALTER TABLE 表名 DROP UNUSED COLUMNS;

表的重命名

RENAME 旧的表名 TO 新的表名;

第九章约束和视图

约束

约束:对表的强制规定

约束的分类:

主键约束:不能重复,不能为空,主键可以是多个,称为联合主键。
  • primary key 提示信息是系统默认的。列级别
  • constraint ...primary key(列名)在最后加上。表级别
唯一约束:不可以重复,但可以为空UNIQUE

非空约束:不可以为空

NOT NULL。只有它只有列级别的约束。
检查约束:检查一个列的内容是否合法CHECK(条件)
外键约束:进行表关联 

根据约束约束的位置分类

  • 列级别约束。直接在列的后面
  • 表级别约束。在所有列的后面

1.主键约束的操作:

方法①:

DROP TABLE 表名;
CREATE TABLE 表名(         
列1 数据类型 【default 默认值】PRIMARY KEY,         
列2 数据类型 【default 默认值】,         
······
);

 

CREATE TABLE person(
PID VARCHAR2(18) PRIMARY KEY,
NAME VARCHAR2(20),
AGE NUMBER(3),
BIRTHDAY DATE,
SEX VARCHAR2(2) default '男',
ADDRESS VARCHAR2(200)
);

 

方法②:

【推荐】报错更直观

DROP TABLE 表名;
CREATE TABLE 表名(         
列1 数据类型 【default 默认值】,         
列2 数据类型 【default 默认值】,         
······        
CONSTRAINT 约束错误的名字 PRIMARY KEY(列名)
);

CREATE TABLE person(
PID VARCHAR2(18) ,
NAME VARCHAR2(20),
AGE NUMBER(3),
BIRTHDAY DATE,
SEX VARCHAR2(2) default '男',
ADDRESS VARCHAR2(200),
CONSTRAINT person_pid_pk PRIMARY KEY(pid)
);

 

方法③:
 

CREATE TABLE person(
PID VARCHAR2(18) CONSTRAINT person_pid_pk PRIMARY KEY,
NAME VARCHAR2(20),
AGE NUMBER(3),
BIRTHDAY DATE,
SEX VARCHAR2(2) default '男',
ADDRESS VARCHAR2(200)
);

2.检查约束CHECK   

CHECK(age between 0 and 150); 
CHECK(sex IN('男','女'));

3.外键约束 

DROP TABLE department;
CREATE TABLE department(
deptno number primary key,
dname varchar2(10)
);
DROP TABLE employee;
CREATE TABLE employee(
Empno number(5) primary key,
Ename varchar2(10),
Deptno number(3) ,
CONSTRAINT employee_deptno_fk foreign key( deptno) PEFERENCES department(deptnoo)
);

追加约束

(非空约束不可以这么添加)

ALTER TABLE 表名 ADD 约束;

ALTER TABLE person ADD primary key(pid);

删除约束

ALTER TABLE 表名 DROP 约束;

ALTER TABLE person DROP primary key(pid);删除列级约束

ALTER TABLE person DROP constraint person_pid_pk;删除表级约束

约束的禁用和启动

//禁用

ALTER TABLE 表名 DISABLE 约束;

ALTER TABLE person DISABLE primary key(pid);

ALTER TABLE person DISABLE constraint person_pid_pk;

//启动

ALTER TABLE 表名 enable 约束;

查看约束

SELECT * FROM user_constraints WHERE table_name='EMP';

因为emp在内存存的是大写

视图

视图:来自一个表或多个表的数据的集合

  • 为了向用户隐藏部分信息
  • SQL允许通过查询来定义“虚关系”。它在概念上包含查询的结果。虚关系并不预先计算并存储,而是在使用虚关系的时候才通过查询被计算出来。任何不是逻辑模型的一部分,但作为虚关系对用户可见的关系称为视图。
  • 视图关系在概念上包含查询结果中的元组,但并不预先计算和存储。相反,数据库系统存储与视图关系相关联的查询表达式。当视图关系被访问时,其中的元组是计算查询结果而被创建出来的。
  • 一旦创建了视图,我们就可以使用视图名指代该视图生成的虚关系,视图名可以出现在任何关系名出现的地方。视图的属性名可以限定。

CREATE 【OR REPLACE】【FORCE UNFORCE】VIEW 视图名   //FORCE不管表存不存在都建 UNFORCE只有表存在才建

AS

SELECT语句

【WITH CHECK OPTION 约束】  //把约束也复制过来

【WITH READ ONLY】  //只能查询

权限不够时,在超级管理员模式下写命令

​CREATE VIEW  v_myemp
AS
SELECT empno,ename,sal,comm 
FROM scott.emp​

删除视图

DROP VIEW 视图名;

查看视图

SELECT * FROM user_views;

 

第十章同义词和序列

同义词

表的另外一个名字。只有管理员才有权力创建和删除同义词

创建同义词

CREATE SYNONYM 同义词名 FOR 对象名

删除同义词

DROP SYNONYM 同义词名

序列

序列:按照一定的规则能够自动增加减少数字的一种数据库对象。

语法格式

CREATE SEQUENCE 序列名

【INCREMENT BY N】

【START WITH N】

【MAXVALUE N】

【MINVALUE N】

【CYCLE NOCYCLE】

【CHCHE N NOCACHE】

一个预先分配内存一个不预先分配,N默认20

 

创建序列test_seq,初始值为10,每次增长2,最大值100,最小值9,循环序列,每次存储10

CREATE SEQUENCE test_seq
START WITH 10
INCREMENT BY 2
MAXVALUE 100
MINVALUE 9
CYCLECHCHE 10;

 

伪列

CURRVAL序列返回的当前值

NEXTVAL序列返回下一个值

注意,CURRVAL在被引用之前,必须先使用NEXTVAL来产生一个序列值


select test.CURRVAL from dual;

//序列实现自动编号

insert into person values(test.NEXVAL,'scott');

修改序列

空间配额不可改小,start with不可以用

语法格式:

ALTER SEQUENCE 序列名
【INCREMENT BY N】

【MAXVALUE N】
【MINVALUE N】
【CYCLE NOCYCLE】
【CHCHE N NOCACHE】

删除序列

DROP SEQUENCE 序列名

ROWID 伪列

系统自动产生。rowid能唯一标识出每一条数据库记录的物理地址,通过rowid可以快速定位到一条行记录

数据对象编号6位   相关文件编号3位    块编号6位    行编号3位

第十一章索引index

分类

单列索引:索引建立在一列上

复合索引:索引建立在某几列上

创建索引

自动创建:当在建表的时候,使用了PRIMARY KEY或者是UNIQUE时,数据库会自动创建一个索引。

手工创建:

CREATE INDEX 索引名

ON 表名(列名1,列名2……)

注意:索引命名规范,idx_表名_列名

CREATE INDEX idx_emp_ename
ON emp(ename);
CREATE INDEX idx_emp_deptnojob
ON emp(deptno,job);

测试索引

CREATE TABLE e1 AS SELECT * FROM emp;  //复制表结构,不复制约束
INSERT INTO e1 SELECT * FROM e1;   //批量插入
UPDATE e1 SET empno=ROWNUM;  
 
SELECT ename,sal FROM e1 WHERE empno=210000;  //时间0.076s
create index e1_id on e1(empno);          //加上索引
SELECT ename,sal FROM e1 WHERE empno=210000;    //时间0.016s

删除索引

DROP INDEX 索引名

索引缺点

降低DML速度

占据资源多

频繁更新表不建议使用

有单行函数,有无索引速度差不多

第十二章用户

用设置用户的安全参数来控制用户的访问和操作。

Oracle数据库的初始用户

sys:超级管理员,权限最大的,可以启动,修改,关闭数据库。

system:一般管理员(辅助管理员),它不可以启动和关闭数据。主要进行一些管理操作:创建用户,删除用户等。

scott:用来测试网络连接。

public:它本质上是一个用户组,数据库中的任何一个用户都属于该组。因为要为数据库中的每个用户授权,则可以把授权直接授予public组。

用户属性(安全参数)

(1)身份认证:数据库身份认证,外部身份认证,全局身份认证

(2)默认表空间

(3)临时表空间

(4)表空间配置

(5)概要文件

(6)账号状态

创建用户(不能执行任何操作)

语法格式:

CREATE USER 用户名 IDENTIFIED

[BY 密码(数据库身份认证)/ EXTERNALLY(外部身份认证)/ GLOBALLY AS 'externl_name'(全局)]

[DEFAULT TABLESPACE tablespace_name]   //默认表空间

[TEMPORARY TABLESPACE temp_tablespace_name]    //临时表空间

[QUOTA n K M UNLIMITED ON tablespace_name]   //表空间配额

[PROLFILE profile_name ]   //概要文件

[PASSWORD EXPIRE]

[ACCOUNT LOCK/UNLOCK]   //锁定

 

范例,创建一个用户user3,口令user3,默认表空间为USERS,该表空间配额为10MB,初始状态为锁定。

CREATE USER user3 
IDENTIFIED BY user3DEFAULT 
TABLESPACE USERS 
QUOTA 10M ON USERS ACCOUNT LOCK;

 

修改账号

语法格式:

ALTER USER 用户名【 IDENTIFIED】

[BY 密码 EXTERNALLY GLOBALLY AS 'externl_name']

[DEFAULT TABLESPACE tablespace_name]

[TEMPORARY TABLESPACE temp_tablespace_name]

[QUOTA n K M UNLIMITED ON tablespace_name]

[PROLFILE profile_name ]

[DEFAULT ROLE role_list ALL 【EXCEPT role_list】NONE]

[PASSWORD EXPIRE]

[ACCOUNT LOCK UNLOCK]

范例:

修改user3的密码,新密码为newuser3,同时将该账号解锁。

ALTER USER user3 IDENTIFIED BY newuser3 ACCOUNT UNLOCK;

修改用户user3的默认表空间为ORCLTBS1,在该表空间的配额为20MB,在USERS表空间的配额为5MB。

ALTER USER user3  DEFAULT TABLESPACE ORCLTBS1 QUOTA 20M ON ORCLTBS1 QUOTA 5M ON USERS;

删除用户

DROP USER 用户 [cascade]     //cascede不删除账户下的数据库对象

查询用户

语法格式:select * from ……

ALL_USERS:包含数据库所有用户的用户名,用户id和创建时间

DBA_USERS:包含数据库所有用户的详细信息

USER_USERS:包含当前用户的详细信息

DBA_TS_QUOTAS:包含所有用户的表空间配额信息

USER_TS_QUOTAS:包含当前用户的表空间配额信息

V$SESSION:包含用户会话信息。数据少,但因会话未结束,会一直打印。

V$OPEN_CURSOR:包含用户执行的SQL语句信息

第十三章权限管理

分类:

  •       对象权限(增删改查)
  •       系统权限

系统权限:

注意事项

(1)只有DBA才能拥有ALTER DATABASE系统权限

(2)应用程序开发者一般需要拥有的是CREATE TABLE,CREATE VIEW,CREATE INDEX A等系统权限

(3)普通用户一般只具有CREATE SESSION 系统权限

(4)只有授权时带有WITH ADMIT OPTION 子句时,用户才可以将获得的系统权限再授权给其他用户,即系统权限的传递性

语法格式

GRANT 系统权限 TO 用户角色 PUBLIC [WITH ADMIT OPTION];

注意:如果授予多个系统权限,则之间用逗号分隔;如果授予多个用户,中间用逗号分隔。
 

GRANT FREATE SESSION TO user3;
GRANT FREATE TABLE,CREATE VIEW TO user3;

授权的传递


grant create session,create table,create view to user1 with admin option;  //授权连接

grant user1 to user2;

权限的回收

(系统权限的回收不是级联回收)

REVOKE 系统权限 FROM 用户列表;

对象权限,级联回收

1)对象权限的授予

GRANT 对象权限列表 ALL ON 对象列表/角色列表 【WITH GRANT OPTION】;

//例子
//将emp表的select,update,insert 权限授予user1用户。 
GRANT select,update,insert on scott.emp to user1; 

//例子
//将emp表的select,update,insert 权限授予user2用户。
//user2用户将emp表的select,update,insert 权限授予user3. 
GRANT select,update,insert on emp to user2 with grant option;
//连接到user2用户
GRANT select,update,insert on emp to user3; 

//例子
GRANT select,update,insert on emp to user2 with grant option;
GRANT delete on emp to user2 with grant option;
//连接到user2用户
GRANT delete on emp to user3;  //这样是错误的

2)对象权限的回收

PEVOKE 对象权限列表 ALL ON  对象  TO 对象列表/角色列表;

查询权限信息

DBA_TAB_PRIVS;授权信息
ALL_TAB_PRIVS;对象授权信息
USER_TAB_PRIVS;当前对象授权信息
DBA_COL_PRIVS;所有字段已授权信息
USER_COL_PRIVS;所有当前用户已授权信息
DBA_SYS_PRIVS;包含授权用户或角色的系统权限信息
USER_SYS_PRIVS;包含当前用户

第十四章角色管理

角色:一系列相关权限的集合

角色的分类

  •              系统预定义角色
  •              用户自定义角色

(1) 系统预定义角色

SELECT * FROM DBA_ROLES;//一般不会使用

(2) 用户自定义角色

1)创建角色

CREATE ROLE 角色名称 【NOT IDENTIFIED】【IDENTIFIED BY 密码】;角色失效/设置角色密码

//例子

create role high;

create role h identified by 123;

create role identified by 23;

2)角色权限的授权与回收

就是之前权限授予一样的。就是对象和系统权限一样的。

GRANT CONNECT,CREATE,TABLE,CREATE VIEW TO low_tiger_role;
GRANT CONNECT,CREATE,TABLE,CREATE VIEW TO middle_tiger_role;
GRANT CONNECT,CREATE,TABLE,CREATE VIEW TO high_tiger_role;
GRANT SELECT,UPDATE,INSERTDELETE ON scott.emp TO high_tiger_role;
PEVOKE CONNECT FROM low_tiger_role;

注意:给角色授权时需要注意一个事情,一个角色可以被授予另一个角色,但是不能授予去哦本身,不能产生循环授权

3)修改角色

说白了就是让角色生效或失效

ALTER ROLE 角色名称 【NOT IDENTIFIED】【IDENTIFIED BY 密码】;

//例子

为high 角色添加口令,取消low的角色口令

alter role high identified by 123456;

alter role low no identified

注意:修改角色必须具有ALTER ABY ROLE系统权限,以及WITH ADMIN OPTION权限。如果是角色的创建者,则自动具有针对该角色的修改权限。

4)角色的生效与失效

SET ROLE 【角色名称【IDENTIFIED BY 密码】】【ALL【EXCEPT 角色名称】】【NONE】;none是角色失效

​范例:设置当前所有角色失效   SET ROLE NONE;
范例:设置某一个角色生效  SET ROLE high_tiger_role IDENTIFIED BY highrole;
范例:设置多个角色生效   SET ROLE high_tiger_role,low_tiger_role IDENTIFIED BY highrole;
范例:设置除了某个角色之外,其他的角色都生效   SET ROLE ALL EXCEPT low_tiger_role;​

5)删除角色

DROP ROLE 角色名称;

利用角色进行权限管理

(1)给用户或角色授予角色

GRANT 角色列表 TO 用户列表/角色列表;

//例子:将connnect,high角色授予用户user1

grant connect,high to user1;

2) 从用户或角色回收角色权限

revoke 角色列表 from 用户列表/角色列表;

revoke connect from high;

3)用户角色的激活或屏蔽

alter user 用户名 default role 【角色名称】|【ALL(except 角色名称)】|【NONE】;

//例子:屏蔽用户的所有角色

alter user user1 default role none;

4)查询角色信息

DBA_ROLES所有角色及其描述
DBA_ROLE_PRIVS包含被数据库中所有用户和角色授权的角色信息
USER_ROLE_PRIVS包含被当前用户授权的角色信息

ROLE_ROLE_PRIVS    

被角色授权的角色信息
ROLE_SYS_PRIVS角色授权的系统权限
ROLE_TAB_PRIVS角色授权的对象权限
SESSION_ PRIVS当前会话的系统权限
SESSION_ROLES当前会话的对象权限

第十五章概要文件

概要文件是数据库和系统资源的集合,是Oracle数据库安全策略的重要组成部分,利用概要文件,可以限制用户对数据库和系统资源的额使用,同时还可以对用户口令进行管理。

每个数据库用户都必须有一个概要文件,通常DBA将用户分为几种类型,每种类型的用户创建一个概要文件。

系统资源的限制:

  •     CPU使用时间
  •     用户连接数据库的时间
  •     用户连接数据库的空闲时间
  •     私有sql区的使用
  •     每个用户的并发访问数

1)创建概要文件 

create profile 概要文件名 limit 系统资源限制参数|口令管理参数;

//例子:创建一个名为pwd的概要文件,如果用户连续4次登陆失败,则该账号被锁定。十天后,该账号自动解锁
create profile pwd limit FAILED_LOGIN_ATTEMPTS 4 PASSWORD_LOCK_TIME 10; 

//例子:创建一个res概要文件,每个用户可以创建四个并发会话,每个会话连接时间最长为60min,
如果用户20min内无操作,结束会话,每个会话的私有SQL区大小为100KB,每个SQL语句语句的占用总量不超过10s。 
create profile res limit 
SESSION_PER_USER 4 CONNECT_TIME 60 IDLE_TIME 20 PRIVATE_SGA 100k
CPU_PER_CALL 1000;  //单位1/100s

2) 将概要文件分配给用户

如果给两个概要文件,后面的替换前面的。
 

//1 在创建用户的时候指定概要文件

create user5 identified by user5 profile res;

//2 将默认的概要文件修改为指定的。为用户指定概要文件

alter user user5 profile res;

3)删除概要文件

drop profile 概要文件名称 cascade //级联关系

4)查询概要文件

SELECT * FROM 动态视图

USER_PASSWORD_LIMITS

USER_RESOURCE_LIMITS

DBA_PROFILES

select * from SYS.DBA_PROFILES;
select * from SYS.USER_RESOURCE_LIMITS;

考试题型
选择题(40道,40分)

阅读题(12空,24分)
范例,不会考范例

简答题(1题,12分)

设计题(4问,24分)

类似于阅读题,给说明,给表。

第一问,表的设计是否有问题

              表之间的关联

              约束

              是否缺少字段

              类型

后三问,SQL语句题,类似于上机题。

 

考试时间月末

 

第一章

1)过程:需求分析,概念结构设计,逻辑结构设计,物理结构设计,数据库实施,运维。

2)设计概念的四种类型:自顶向上,自底向下,逐步扩张,混合策略。

 

第二章oracle体系结构

1)重点了解几个概念,什么是数据库,什么是实例,什么是SID,使用SID的限制是什么(最多包含包含八个字符;名字不可重复,是唯一的)。

2)内存这块,大家只需要知道,在oracle里面有三个主要的内存结构,分别是SGA,DGA,UGA。系统全局区,进程全局区,用户全局区。

3)监听不考。

 

第三章到第六章

考标准SQL的指令,包括表管理,视图管理,同义词管理,索引管理。

 

第七章第八章不考

也就是说PLSQL有关的都不考

 

第九章

虽然课件只有权限,有用户和管理权限,但上课角色和概要文件讲了,所以在内容范围内。

 

第十章事务

重点掌握一下

1)事务的四大特性,原子性,一致性,隔离性,持久性。分别都是什么,需要知道。

2)需要知道几个指令:commit,rollback,save point。commit 提交,rollback,回滚(回到上一次),save point 设置保存点。知道这几个分别代表什么意思。

什么是设置保存点?比如abcd分别代表我的不同操作,我在d这块rollback,它返回返回到上一条c。如果想从d返回b或者a,通过save point实现。在这块写save point b,上边来个save point a。rollback save point b,直接从d到b这块。

 

第十一章锁

出了一道选择题,之前讲的,如果是同时多个会话开启的时候,问结果或状态。

在第一次执行a会话,执行一个select,查询操作,然后在这执行一个insert操作,insert操作之后执行一个select操作,在这块执行一个commit。第三步的时候执行的结果状态是什么,或者第二步的时候执行的结果状态是什么。考的是一个锁的操作。

概念这块没有。

 

这次考题纯概念题很少,也就一两道,基本都是应用,选择题也是如此。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值