1. 关系型数据库概念:
(1)、 (1970 E.F.codd制定一个数据库产品成为关系型数据库所必须符合的一系列相关的标准)(RDBMS关系型数据库系统)
(2)、 关系型数据库需要包含三个方面:对象或关系的集合、基于关系的操作集合、因数据精确和一致性而带来的数据完整性
(3)、 关系型数据库是关系的集合或二维表的集合(实体类->表,对象->表中的一条记录——OR Mapping)
(4)、 每个表由行和列组成,列->字段,行->记录,主键primarykey(PK)(数据是唯一的,标识记录的字段,可以多个字段作主键)、外键foreign key(FK)(这字段数据来源另一张表的某字段数据,与另外的表产生关联的字段:一对一?一对多?多对多?)
(5)、 Oracle Server(Oracle的RDBMS)中的表包括User Tables和Data Dictionary两类
(6)、 对数据库操作:增、删、改、查(Structured Query Language (SQL)来操作)
(7)、 关系型数据的对象(数据库中的东西):表(存储的基本单元)、视图(从一个或多个表的数据子集的一逻辑表示)、序列(用来产生主键)、同义词(一个对象的别名)、编程单元(包括过程、函数或包以及PL/SQL中的声明)
(8)、 SQL语言包含4个部分:数据定义语言(DDL:CREATE、DROP、ALTER);数据操作语言(DML:INSERT、UPDATE、DELECTE);数据查询语言(DQL:SELECT);数据控制语言(DCL:GRANT、REVOKE、COMMIT、ROLLBACK)
2. Oracle(甲骨文)简介
Oracle Database下载安装:http://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html
Oracle 数据库监听程序' 的端口: 1521
Oracle Services for Microsoft Transaction Server' 的端口: 2030
Oracle HTTP 监听程序' 的端口: 8080
连接数据库:Oracle自带“运行SQL命令行”输入“conn system”;windows cmd命令行工具输入sqlplus “as sysdba”(作为管理员身份);
3. 标准SQL SELECT语句
(1)、 查询语句:SELECT
/*
DISTINCT对查询结果返回不重复的记录,如果有多列,不能出现完全一样的记录
SELECT后面可以是通配符,column列名(可以查找指定的列,查找的多列用”,”隔开),alias列的别名(别名包含空格、特殊字符或者区分大小写,要使用双引号,”alias”),expr为表达式(可以是某些字符或字符串,可以是算数表达式:只能对数字和日期两种数据类型进行四则运算,如果有NULL值,最终结果也为NULL(NVL函数将NULL转换成某个数值:NVL(col_name,value)));在两个列名之间或列名与单个字符或字符串之间用”||”连接,查询显示结果两个列的值或列值与字符或字符串会连接一起;SELECT后面可以跟多个*|col_name [alias]|expr [alias],……,表示查找多列
FROM子句后面跟上要查找的表名
DISTINCT查找不重复的记录
SELECT语句可以写在一行或多行,不区分大小写(关键字一般大写)
子句另起一行写,便于维护
语句以’;’结尾
查找结果列名显示默认大写,数字列值靠右对齐,字符串日期靠左对齐
*/
SELECT [DISTINCT] *|col_name [alias]|expr[alias],……
FROM table_name;
(2)、 排序语句:ORDER BY子句
/*
对查询结果集进行排序
ORDER BY子句在整个SELECT语句中始终位于最后
ORDER BY后面可以列名、别名、表达式、列出现在SELECT关键字后列的顺序号
ORDER BY后面可以跟多个column|expr|alias……[ASC|DESC],写在在前面的列名排序优先级高
ASC表示升序,默认是ASC,可以不写;DESC表示降序
查询结果有NULL值,NULL值最大
*/
SELECT [DISTINCT] *|col_name [alias]|expr [alias],……
FROM table_name
[ORDER BY column|expr|alias…… [ASC|DESC]];
(3)、 条件查询:WHERE子句
/*
对查询结果集进行筛选
condition(s)表示查询条件
写在FROM子句后后面
由一至多个限定条件组成,限定条件表达式([NOT] BETWEEN…AND…(查询在范围内记录,包括边界);[NOT] IN(list);[NOT]LIKE(模糊查询,使用通配符:%零个或多个字符;_单个字符;’\a%’escape’\’表示\是转义字符);IS [NOT] NULL)、比较符(大于:>;等于:=;小于:<;大于等于:>=;小于等于:<=;不等于:!=,<>,^=)、逻辑运算符(NOT;AND;OR)和字面值组成
所有字符串和日期要用单引号括起来,数值不需要单引号
日期在Oracle的格式为’DD-MON-YY’
*/
SELECT [DISTINCT] *|col_name [alias]|expr[alias],……
FROM table_name
[WHERE condition(s)]
[ORDER BY column|expr|alias…… [ASC|DESC]];
4. Oracle数据库单行函数
单行函数包括:字符函数、数值函数、日期函数、转换函数;
单行函数使用:作用在单行(单条记录)上;每一行都可以返回一个结果;可操作数据项;可以接收参数并返回结果;修改数据类型;可以嵌套
function_name(column|expression,[arg1,arg2,......])
(1)、 字符函数
LOWER(str):转换成小写
UPPER(str):转换成大写
INITCAP(str):首字母大写,其余小写
CONCAT(str1,str2):字符串连接
SUBSTR(str,start,length):字符串截取
LENGTH(str):求字符串长度
NVL:空值置换
(2)、 数值函数
ROUND(val[,i]):四舍五入,val精确到小数点后i位
TRUNC(val[,i]):截取,不进行四舍五入,保留到小数点后i位,i可以为负数
MOD(被除数,除数):取余
(3)、 日期函数
Oracle日期包括世纪、年、月、日、小时、分、秒、毫秒
默认显示格式:DD-MON-YY
函数SYSDATE(精确到秒)、SYSTIMESTAMP(精确到毫秒,时区)可以返回系统时间
通过DUAL表(这是一张虚表)可以使用SYSDATE和SYSTIMESTAMP来查看系统时间
先用TO_DATE(date_str)将表示日期时间字符串转换成DATE
MONTHS_BETWEEN(date1,date2):两个日期上的月数
ADD_MONTHS(date,n):在指定日期上增加月数,n可以是负数
NEXT_DAY(date,’weekday’):指定日期的接下来第一个weekday是哪一天(如例NEXT_DAY(‘01-SEP-95’,’FRIDAY’)95年9月1日接下来第一个星期五是哪一天(08-SEP-95))
LAST_DAY(date):指定日期的最后一天
ROUND(date,’year|month|day’)
TRUNC(date,’year’):对指定日期进行截取
(4)、 转换函数
① TO_CHAR(date,’fmt’):将日期时间按指定格式转换成字符串
使用format定制日期格式;使用fm去除空格或者0;使用逗号’,’分隔
日期格式模型的元素:
小写结果显示小写,大写结果显示大写
year:英文年份
month:英文月份
mon:英文月份缩写
day:星期几的英文单词
dy:星期几前三个字母
ddsp:英文的一个月的几日
ddspth:英文拼写的一个月第几日
d:一个星期的星期几数字表示,星期天为1,星期六为7
dd:一个月的第几天
ddd:一年的第几天
yyyy:四位数字表示年
yy:两位数字表示年代表和当前时间所处同一世纪
rr:两位数字表示年代表,以当前时间为基准,0-49代表本世纪,50以上代表上世纪(默认)
mm:两位数字表示月
hh:12小时制,hh24:24小时制
mi:分钟
ss:秒
AM:上午
PM:下午
② TO_CHAR(number,’fmt’):将数值转换成字符串
0:强制显示0来填充为填满数据位数
9:代表一位数字,多个9表示多位数
$:设置一个浮点型的美元符号
L:使用本地货币符号
FM:去掉前面的0、空格
③ TO_NUMBER(char):字符串转换数字
④ TO_DATE(char[,’fmt’]):字符串转换成日期时间,fmt具体格式参照TO_CHAR(date,’fmt’)
(5)、 函数嵌套
5. 多表查询
(1)、 涉及到的数据不在一张表中,通过join(连接)可将多几张表连接起来查询数据,通常通过表的主键和外键进行表之间的连接
(2)、 表的join方式:等价连接,不等价连接,外连接(包括左外连接和右外连接),内连接和全连接,自连接,集合运算符union、minus、unionall、intersert
(3)、 笛卡儿积的避免:通过join操作避免表连接产生冗余数据
(4)、 等价连接
等价连接两张表间的连接条件是通过“=”建立
列或表可以使用别名,一旦给表创建别名,标识列时只能通过表的别名而不能使用表的真名
通常采用主键和外键进行表的连接
SELECT table1.column,table2.column
FROM table1,table2
WHERE table.columnX=table2.columnY;
(5)、 不等价连接
两张表间的连接条件不是通过“=”号建立,可以是“<、>、BETWEEN…AND…、LIKE”等
(6)、 外连接
把匹配和未匹配的记录也查询出来
Oracle数据库的外连接(非标准SQL数据库外连接),只能在等号的一边写在“(+)”, (+)写在等号右(左)侧称左(右)外连接,将=号左(右)边表未匹配的记录也查询出来。
包含外连接的条件不允许使用in操作符、or操作符连接到另外一个条件
SELECT table1.column,table2.column
FROM table1,table2
WHERE table1.columnX(+)=table2.columnY;
标准SQL语句实现外链接
把left outer join左表未匹配的记录也查找出来
把right outer join右表未匹配的记录也查找出来
SELECT table1.column,table2.column
FROM table1 RIGHT|LEFT OUTER JOIN table2
ON table1.columnX=table2.columnY;
(7)、 内连接
查询出匹配的记录,未匹配的记录无法查询出来
SELECT table1.column,table2.column
FROM table1 [INNER] JOIN table2
ON table1.columnX=table2.columnY;
(8)、 全连接
把两张表中未匹配的记录都查询出来
SELECT table1.column,table2.column
FROM table1 FULL OUTER JOIN table2
ON table1.columnX=table2.columnY;
(9)、 自连接
一张表自己连接自己,将一张表当作两份,同样可以用外连接
SELECT table.column1,table.column2
FROM table,table
WHERE table.columnX=table.columnY;
(10)、 集合运算符
① UNION:
在进行表连接后筛选掉重复的记录,在表连接后会对所产生的结果集进行排序,删除重复的记录再返回结果
两个SELECT语句返回结果集类型一样才可能有重复的记录
SELECT语句 UNION SELECT语句
② UNION ALL:
把所有结果合并返回不排序,不删除重复的
SELECT语句 UNION ALL SELECT语句
③ MINUS:
在第一个结果集中减去第二个结果集与第一个结果集相同的记录,最终的结果集是第一个结果集剩下的记录
SELECT语句 MINUS SELECT语句
④ INTERSERT:
返回两个结果集的交集
SELECT语句 INTERSERT SELECT语句
6. Oracle数据库组函数
组函数作用于行集,如果分了若干个组,给每个组一个结果
组函数出现于SELECT的列和HAVING子句
在SELECT声明的GROUP BY子句将行细分为更小的组,HAVING子句用来限制结果集
先执行WHERE子句进行过滤,再进行分组,接着执行组函数,然后执行HAVING子句对分组结果进行限定,最后是ORDER BY子句进行排序
SELECT column,group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
(1)、 常见的组函数:
/*
DISTINCT 唯一值(不包括重复值),ALL所有值(包括重复值),不包括空值,n代表所有操作的列为数值类型,expr代表所操作的列可为任意数据类型,//*统计全部,包括空值。默认是ALL
*/
AVG(DISTINCT|ALL|n col)
COUNT(DISTINCT|ALL|expr|* col)
MAX(DISTINCT|ALL|expr col)
MIN(DISTINCT|ALL|expr col)
SUN(DISTINCT|ALL|n col)
VARIAGE(DISTINCT|ALL|n col)离散差
STDDEV(DISTINCT|ALL|n col)标准差
(2)、 GROUP BY子句
GROUP BY子句对查询结果集分组
GROUP BY后面只能跟列名
出现在SELECT语句中没有使用组函数的列必须出现在GROUP BY子句中
GROUP BY子句中的列不必须出现在SELECT中,但是GRPOUP BY子句中的列出现在SELECT中会更有意义
GROUP BY子句中若出现多列时是按多列联合唯一进行分组
若分组列的值为NULL,照样分组
在SELECT语句中可以不使用组函数而直接分组
(3)、 HAVING子句
HAVING子句对GROUP BY分组的情况加上限定条件,可以使用组函数(WHERE子句可以使用除组函数外任何限定条件)
使用HAVING子句,必须使用GROUP BY子句
如果要对组函数的结果进行限制,那么必须要使用GROUPBY子句和HAVING子句
如果HAVING子句后面跟的不是组函数而是列,那么GROUP BY子句必须根据这个列进行分组
7. 子查询
是一种嵌套查询,子查询内容用()括起来,是相对于主查询来说的,可以放在WHERE子句、FROM子句、HAVING子句的SELECT查询语句或其他语句(CREATE TABLE、INSERT等语句)。
根据返回的结果是单个值还是多个值可以分为单行子查询(使用单行比较符“=”)和多行子查询(使用多行比较符“in”)
8. 系统开发的概念
(1)、 系统开发周期:需求分析、系统设计、编码、测试、上线、维护
(2)、 数据库开发:
是一个自顶向下的系统过程,将商业信息需求转化为一个可操作的数据库
由五个阶段组成:Strategy and Analysis(策略与需求)、Design(设计,构建实体关系模型图(ER图))、Build and Document(构建相应的文档)、Transition(实例图)、Production
数据库设计
9. 数据建模
(1)、 Entity Relationship Model(ER图)
和人们思想的概念交互,能高效地收集并且文档化一个公司组织的信息需求,提供一个容易理解的系统图解,能被容易地开发并重定义,清晰地定义了信息的范围,分隔信息需求
(2)、 实体关系建模的概念:
实体:生活中存在的一些事物
属性:描述实体的一些特征
关系:两个实体之间的关系
(3)、 实体关系模型
根据具体业务规划和描述创建ER图
*表示唯一的,#表示非空的,0表示任意,虚线表示may be,实线表示must be,竖杠(|)代表要强制在(|)一方建立一个联合主键,将对方UID拿过来做联合主键
(4)、 实体间关联关系
one-to-one:一对一关系如果要建立主外键关系,如果都是实线或都是虚线可以随便建。如果一边实现,一边虚线,实线一边建唯一外键
one-to-many:一对多关系外键建立在多的一方
many-to-many:多对多可以拆成两个一对多或者建立一张桥表
(5)、 范式
符合某一种级别的关系模式的集合,关系型数据库要遵循范式
第一范式:如果关系中所有属性的值都是单个值(有主关键字,主关键字不能为空,主键不重复,字段不可再分)
第二范式:如果关系模式是第一范式,而且关系中每一个非主属性不部分依赖于主键(第二范式主要任务是满足第一范式前提下,消除部分依赖)
第三范式:满足第二范式的前提下,消除传递依赖
(6)、 完整性约束
主键(primary key):一个表最多只能有一个主键,主键内容未非空和唯一。如果多个列联合作为主键,则是联合唯一、单列非空(代理主键、自然主键)
外键(foreign key):由一个列或者多个列组成,取值为本表或者其他表的唯一约束列或主键列,可以为NULL,但如果外键是联合主键的一部分那么外键的值不能为NULL
非空(NOT NULL):一定要赋值
唯一(UNIQUE):取值不能重复
CHECK:自定义约束限定列的内容
(7)、 数据库设计
实体和属性映射成表和列;命名规则(以字母开头,长度限制30个字符,A-Z、a-z、0-9、_、$和#,不能是保留字,在同一用户下对象名不能重复);数据类型(VARCHAR2(size)可变长度字符串;CHAR(size)固定长度字符串;NUMBER(i)i为整数位;NUMBER(p,s)p为有效数字位,s为小数位;DATE;TIMESTAMP精确到毫秒;CLOB可存储大数据的字符串;BLOB可存储二进制数据);其他需求设计:设计索引,定义视图,设计物理存储空间,重新定义完整性约束
创建表示例图:映射实体到表、映射属性到列、映射UID到主键、映射关联关系到外键
10. DDL语句
(1)、 CREATE语句
创建表:
/*
schema:用户所创建对象的集合,不写默认在当前用户下建表;
DEFAULT val:设置默认值,如某列没有赋值,列值即为改默认值
不命名约束,Oracle会自动产生特定名字的约束,名字以SYS_为前缀。约束级别有列级别(约束类型紧跟在列后,约束和列间没有逗号分隔,NOT NULL只能用于列级别)和表级别(约束和列间通过逗号分隔,为两个或两个以上的列定义联合约束,包括联合主键,联合外键,联合唯一键时必须在表级别上定义)
非空约束:CONSTRAINT tab_col_nnNOT NULL
唯一约束:CONSTRAINT tab_col_ukUNIQUE
主键约束:CONSTRAINT tab_col_pkPRIMARY KEY
外键约束:CONSTRAINT tab_col_fkREFERENCES table_name(column) [ON DELETE CASCADE]/*ON DELETE CASCADE级联删除,删除父表时会删除子表关联的记录*/
CHECK约束:CHECK(condition)
*/
CREATE TABLE [schema.] table_name
(column_name datatype [DEFAULT val] [[CONSTRAINTcolumn_constraint_name] constraint_type],[ [CONSTRAINT table_constraint_name]constraint_type] column_name…);
(2)、 ALTER语句
增加表列
/*
增加表列时可以同时增加NOT NULL和默认值,不能增加其他约束
*/
ALTER TABLE table_name
ADD(column_name datatype [DEFAULT val] [NOTNULL],…);
修改表列
/*
增加表列时可以同时增加NOT NULL和默认值,不能增加其他约束
若要缩小列的宽度,只有改列值为空或表里没有记录
增加的默认值只影响到后来插入的值
若一列有空值不能加非空约束
若要修改列的类型只有该列值为空或表里没有记录
*/
ALTER TABLE table_name
MODIFY(column_name datatype [DEFAULT val][NOT NULL],…);
删除表列
ALTER TABLE table_name
DROP COLUMN column;
增加约束
/*
NOT NULL约束只能在增加列或修改列时完成
*/
ALTER TABLE table_name
ADD [CONSTRAINTcolumn/table_constraint_name] type(column);
删除约束
ALTER TABLE table_name
DROP CONSTRAINT column/table_constraint_name[CASCADE];
约束失效
ALTER TABLE table_name
DISABLE CONSTRAINTcolumn/table_constraint_name [CASCADE];
约束生效
ALTER TABLE table_name
ENABLE CONSTRAINTcolumn/table_constraint_name;
(3)、 DROP语句
删除表
/*
表中的数据全部删除
任何针对该表操作的未提交的事务被提交
所有索引被删除
CASCADE CONSTRAINTS:级联删除相关联完整性约束
不能进行回滚改命令
*/
DROP TABLE table_name [CASCADECONSTRAINTS];
(4)、 其他DDL语句
重命名对象
/*
不仅限表对象,还可以是序列、索引和同义词
必须是当前修改对象的拥有者
*/
RENAME old_name TO new_name;
重命名表的列名
ALTER TABLE table_name
RENAME COLUMN old_column_name TOnew_column_name;
清空表
/*
删除表中所有记录
释放表所占用的表空间,DELECT不会释放
是一个DDL语句,不能回滚,DELECT可以回滚
不会触发触发器动作
删除大量数据时TRUNCATE速度比DELECT快
TRUNCATE操作对象只能是表,DELECT可以是表、视图或者同义词
*/
TRUNCATE TABLE table;
11. DML语句
(1)、 INSERT语句
往表中插入一条记录
/*
列名和插入值顺序、类型和数量一致
若不写列名,默认插入所有列的数据
有默认值的列没有赋值时,取默认值
*/
INSERT INTO table_name (column,…)
VALUES (value,…);
往表中一次插入多条记录
/*
通过子查询实现批量插入
列名和插入值顺序、类型和数量一致
*/
INSERT INTO table_name (column,…)
subquery
(2)、 UPDATE语句
更新表中的记录
/*
不加WHERE子句,更新column所有的记录
*/
UPDATE table_name
SET column_name = value,…
[WHERE condition]
(3)、 DELETE语句
删除表中记录
/*
不加WHERE子句,删除所有记录
存在关联关系时,先删除子表,再删除父表
级联删除,删除父表时,同时删除关联的子表
*/
DELETE [FROM] table_name
[WHERE condition]
12. 事务transaction
(1)、 组合在一块的多个操作,这多个操作表现像一个不可分割的原子操作,要么同时成功,要么同时失败,通过事务确保数据的完整性。特点:原子性、一致性、隔离性
try{
//启动事务
//对表进行操作 (事务)
//提交事务
}catch(Exception e){
//回滚事务
}
(2)、 事务开始边界的声明
通过SQLPlus连接上Oracle,即开始一个事务
一个事务的结束也意味着另一个事务的开始
(3)、 事务结束边界的声明
正常结束(COMMIT):数据改变写入数据库,所有用户均可看到改变后的结果,所有的回滚点擦除,作用于记录上的锁丢失,其他用户可对这些记录进行更新操作,DDL和DCL命令的执行(自动提交),DML不会自动提交,正常退出会自动提交
异常回滚(ROLLBACK):事务进行过程中状态丢失,恢复到事务开始前的状态,作用于记录上的锁丢失,其他用户可对这些记录进行更新操作,系统失败或非正常地终止SQLPuls,将会自动回滚
回滚到特定位置:通过命令SAVEPOINT设置回滚点,通过命令ROLLBACK TO回退到回滚点(设置回滚点:SAVEPOINT p)
13. 数据字典
(1)、 概念:Oracle数据库创建、更新和维护的表,包含数据库的相关信息(数据库用户的名字、授权给用户的权限信息、数据库对象的信息、表的约束信息)
(2)、 分类:
USER(用户创建对象对应的数据字典);
ALL(所有用户所能访问对象(包括用户创建的对象)对应的数据字典表);
DBA(所有对象对应的数据字典);
V$(描述系统性能相关的数据字典表);
DICTIONARY(一个特殊的数据字典表——用来描述数据字典表相关信息的数据字典表);
TABLE_PRIVILEGES(数据表权限)
(3)、 使用人员范围:
DBA人员(V$version、DBA);
开发人员(user_*、all_*)
(4)、 数据字典中常用表的定义:
dictionary(存放数据字典中所有表的信息);
user_object(存放当前用户下所有对象(包括表、视图、索引、序列和约束等));
user_constraints(存放当前用户下所有的约束信息)
user_cons_columns(用来查看和约束相关的列)
dict_columns(可以查看数据字典中所有视图对应的列)
user_users(存放当前用户的信息)
all_user(存放数据库中所有用户的信息)
user_indexes(存放当前用户所有的索引信息)
all_indexes(存放数据库中所有用户的索引信息)
user_tables(存放当前用户所有的表信息)
all_tables(存放数据库中所有用户的表信息)
user_views(存放当前用户所有的视图信息)
all_views(存放数据库中所有用户的视图信息)
user_synonyms(存放当前用户所有表的同义词)
all_synonyms(存放当前数据库所有用户表的同义词)
14. 序列SEQUENCE
Oracle数据库中一种特殊的对象,能够产生连续的整整数,可以为数据库中多个对象共同使用,主要用于作为主键值
(1)、 创建SEQUENCE
CREATESEQUENCE table_name_seq
[INCREMENT BY n]//递增值n
[START WITH x]//初始值x
[MAXVALUE max|NOMAXVALUE]//是否有最大值
[MINVALUE min|NOMINVALUE]//是否有最小值
[CYCLE|NOCYCLE]//到最大值后是否从初始值循环
[CACHE m|NOCHAHE];//预先产生m个值到缓存中,默认20个
(2)、 使用SEQUENCE
通过NEXTVAL(每次获得不同的(下一个)sequence值)和CURRVAL(获得当前指向sequence值)进行调用,在SEQUENCE对象没有通过NEXTVAL调用之前,不能通过CURRVAL调用,否则会产生错误
(3)、 修改SEQUENCE
/*不能修改起始值*/
ALTER SEQUENCE seq_name
[INCREMENT BY n]
[MAXVALUE max|NOMAXVALUE]
[MINVALUE min|NOMINVALUE]
[CYCLE|NOCYCLE]
[CACHE m|NOCHAHE];
(4)、 删除SEQUENCE
DROP SEQUENCE seq_name;
15. 视图
VIEW 是一个或多个表的部分数据结构,他可以像表一样进行CRUD操作但没有具体的存储数据结构,他以一个SELECT语句的形式存放在数据库中。视图本质时一条有名字的SELECT语句,表现为一到多张表的部分内容。
VIEW的有点:限制数据库的访问;简化查询;数据的独立性;对统一数据有不同的表现
(1)、 创建视图
/*
alias要与子查询的column对应
OR REPLACE:如果有相同名字的视图对象则替换
FORCE:如subquery中原表不存在,先创建视图对象,这时视图对象虽然创建,但不能正常使用默认值为NO FORCE
WITH CHECK OPTION:表示可以进行插入、更新和删除操作(会对原表当中),但应该满足WHERE子句条件。不加也可以增删改查,但不会检查条件,在原表中有修改,但视图不能显示。
WITH READ ONLY:视图只允许进行SELECT操作
*/
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[alias,…]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY];
(2)、 VIEW分类
简单视图:(数据来源一张表,不能使用函数,不能分组,可以使用DML操作)
复杂视图:(数据来源一张或多张表,能使用函数,能分组,不可以使用DML操作)
(3)、 确认视图
SELECT view_name,text
FROM user_views;
(4)、 删除视图
DROP VIEW view_name;
16. 索引INDEX
是Oracle中一种对象,数据库服务器用其以加快检索速度。索引会复制索引的列值,并将其按某种算法进行分组排序。通过索引列进行检索时,数据库会自动使用索引,使用索引所维护的列值进行快速检索,然后通过ROWID快速定位到真实的数据内容
(1)、 创建索引
自动创建索引:在创建主键约束、唯一性约束以及使主键约束、唯一键约束生效时会自动创建唯一索引。
手动创建索引:用户可以在列上创建非唯一的索引
(2)、 索引分类:
唯一性索引、非唯一性索引;单列索引、组合索引
(3)、 Oracle使用B*tree索引结构
(4)、 创建索引
CREATE INDEX index_name//index_name命名为table_column_idx
ON table_name(column,…);
(5)、 确认索引
SELECTic.index_name,ic.column_name,ic.column_position col_pos,ix.uniqueness
FROM user_indexes,user_ind_columns
WHERE ic.index_name=ix.index_name
AND ic.table_name = table_name
(6)、 删除索引
DROP INDEX index_name;
17. Oracle体系结构
(1)、 表空间:
Oracle数据库最大的逻辑结构,一个Oracle数据库在逻辑上由多个表空间组成,一个表空间只隶属一个数据库。Oracle中有一个称为SYSTEM的表空间,这个表空间是在创建或安装数据库时自动创建的。主要用于存储系统的数据字典、过程、函数、触发器,也可以存储用户的表、索引等。表空间在物理上包含一个或多个数据文件。
查看表空间
SELECTusername,user_id,default-tablespace,temporary_tablespace
FROM dba_users;
查看数据文件
SELECT file_name FROM sys.dba_data_files;
创建表空间
CREATE TABLESPACE tablespace_name
DATAFILE ‘文件磁盘路径’
SIZE x //指定空间大小
AUTOEXTEND ONNEXT m MAXSIZE n //自动扩展,每次扩展m,最大n
EXITENT MANAGEMENT LOCAL;//本地方式管理
创建临时表空间
CREATE TEMPORARY TABLESPACE tablespace_name
TEMPFILE‘文件磁盘路径’
SIZE x //指定空间大小
AUTOEXTEND ONNEXT m MAXSIZE n //自动扩展,每次扩展m,最大n
EXITENT MANAGEMENT LOCAL;
删除表空间
DROP TABLESPACE tablespace_name
INCLUDING CONTENTS AND DATAFILES;
(2)、 段
数据段:存储用户数据
索引段:用来存储系统、用户的索引信息
回滚段:每个表都有一个对应的回滚段,其名称和数据表名称相同。回滚段用来存储用户数据修改前的值,回滚段于事务是一对多的关系,一个事务只能是有一个回滚段,而一个回滚段存放一个或多个事务的回滚数据。
临时段:用于ORDER BY语句的排序以及一些汇总
(3)、 区
是磁盘空间分配最小单位,磁盘按区划分,每次至少分配一个区。区存储于段中,它由连续的数据块组成。可以通过字典dba_tablespace查询表空间中区的信息;可以通过字典user_tables查询段中区的信息;可以通过字典user_extents查询区的分配状况。
(4)、 数据块
是数据库中最小的数据组织单位与管理单位,是数据文件磁盘存储空间单位,也是数据库I/O的最小单位,数据块大小由DB_BLOCK_SIZE参数决定。
18. 权限
权限的概念:数据库安全(系统安全、数据安全);系统权限(获得数据库访问权限,超过80个权限可以使用);对象权限(操作数据库对象的数据);schema(数据库对象,如表、视图、序列、索引的集合)
(1)、 DBA具有系统级别的权限:
创建新用户、删除用户、删除和备份表(SYS比SYSTEM权限高)
创建用户
CREATE USER user_name
IDENTIFIED password
DEFAULT TABLESPACE d_tablespace
TEMPORARY TABLESPACE t_tablespace
修改用户密码
ALTER USEP user_name DENTIFIED BYnew_password;
授权给普通用户
GRANT CREATE TABLE,CREATE SEQUENCE,CREATE VIEW,CREATESESSION,CREATE PROCEDURE
TO user_name;
(2)、 角色
CONNECT:提供登录和执行基本函数的能力。可以连接数据库以及在这些表中对数据进行查询、插入、修改、删除的权限
RESOURSCE:建立对象的能力
DBA:拥有所有的系统权限,包括无限的空间限额,以及给其他用户授权全部限权的能力
收授予用户角色
GRANT CONNECT,RESOURCE,DBA TO user_name;
(3)、 对象权限
DBA授予用户对象权限
GRANT object_priv[(columns)]/*增删改查的权限*/
ON table_name
TO user|role|PUBLIC /*PUBLIC将权限赋予给所有的用户*/
[WITH GRANT OPINT];/*允许user分配权限的用户继续将权限分配给其他用户,此选项不能赋予PUBLIC*/
(4)、 数据字典中的权限相关表
(5)、 回收权限
REVOKE object_priv[(columns)]
ON table_name
FROM user_name
[WITH GRANT OPINT];//user的回收权限赋予可以给其他用户
19. 同义词SYNONYM
对象定义另一个名字,可以通过这个名字访问该对象
(1)、 创建同义词
/*
PUBLIC创建和删除同义词只能由DBA执行
PUBLIC创建的同义词所用用户可以使用
*/
CREATE [PUBLIC] SYNONYM synonym_name FOR object_name;
(2)、 删除同义词
DROP SYNONYM synonym_name;
20. 数据导入导出
(1)、 数据导出
以DBA身份连接到数据库
创建用户授权
CREATE USER user_name IDENTIFIED BY password;
GRANT RESOURCE,CONNECT TO user_name;
登出SQL*Plus并导出数据文件
exp userid=user_name/password full=y file=*.dmp
(2)、 数据导入
登出SQL*Plus并导入数据文件
imp userid=user_name/password full=y file=*.dmp