Oracle基础

来源:互联网 发布:龙腾世纪审判 知乎 编辑:程序博客网 时间:2024/06/05 06:48

Oracle:
Oracle数据库是美国Oracle公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务端(Client/Service)或B/S体系的数据库之一。
Oracle通常应用于大型系统的数据库产品。
Oracle数据库具有以下的特点:
(1)支持多用户,大量事务的事务处理
(2)数据安全性和完整性控制
(3)支持分布式数据处理
(4)可移植性
Oracle体系结构:
1、数据库
2、实例(Oracle Instance)
3、数据文件(dbf或ora?)
4、表空间(逻辑映射)
5、用户
虚拟机中:sqlplus system/……
本地:sqlplus system/……@192.169.80.10:1521/orcl

创建表空间:
create tablespace waterboss
datafile ‘c:\waterboss.dbf’
size 100m
autoextend on
next 10m

创建Oracle的用户
create user wateruser
indentified by itcast
default tablespace waterboss
用户赋权:
grant dba to wateruser

表的创建,修改,删除
1、创建表
create table 表名(
字段名 类型 (长度) primary key,
字段名 类型(长度),
……
);

数据类型:
char:固定的字符长度,最多存储2000个字节
varchar2:可变长度的字符类型,最多存储4000个字节
long:大文本类型。最大可以存储2个G
number:数值类型
date:日期时间型,精确到秒
timestamp:精确到秒的小数点后6位
二进制型(大数据类型):
CLOB:存储字符,最大可以存4个G
BLOB:存储图像、声音、视频等二进制数据,最多4个G

2、修改表:
添加字段语法:alter table 表名 add(列名 类型,……)
修改字段语法:alter table 表名 modify(列名 类型,……)
修改字段名: alter table 表名 rename column 原列名 to 新列名
删除字段名;alter table 表名 drop colume 列名

3、删除表
drop table 表名

数据增删改:
1、插入数据
insert into 表名[(列1,列2……)] values(值1,值2……);注意:执行insert语句之后一定要进行commit提交事务
2、修改数据:update 表名 set 列名1=值1,……where 修改条件;执行完update之后也要进行commit进行事务提交
3、删除数据:
delete from 表名 where 删除条件;执行完delete语句之后一定要进行commit事务提交
truncate table 表名
比较truncate和delete实现数据删除:
1、delete删除的数据可以rollback
2、delete删除可能产生碎片,并且不能释放空间
3、truncate是先摧毁表结构,再重构表结构

JDBC连接Oracle:
1、创建工程,引入驱动
2、BaseDAO:加载驱动、数据库连接、关闭资源
3、代码编写
JDBC驱动为:
oracle.jdbc.driver.OracleDriver
连接字符串(瘦连接):
jdbc:oracle:thin:@虚拟机的IP:1521:orcl
数据导出与导入:
整库导出: exp system/…… full=y [file=文件名]
整库导入: imp system/…… full=y [file=water.dmp]
按用户导出:exp system/…… owner=wateruser file=wateruser.dmp
按用户导入:imp system/…… fromuser=wateruser filr=wateruser.dmp
按表导出:
exp wateruser/itcast file=a.dmp tables=t_account,a_area(多个表用逗号隔开)
按表导入;
imp wateruser/itcast file=a.dmp tables=t_account

Oralce查询:
一:单表查询
精确查询:select * from 表名 where 条件
模糊查询:select * from 表名 where name like ‘%李’
and运算符
or运算符
范围查询:1、使用>=,<= 2、使用between .. and..
控制查询:where 字段名 is null(is not null)
去掉重复记录:select distinct 字段 from 表名
排序查询:order by (升序) order by desc (降序)
基于伪列的查询:rowid和rownum
rowid:表中的每一行在数据文件中都有一个物理地址,rowID伪列返回的就是该行的物理地址,rowID可以唯一的标识表中的每一行 语句;select rowID,t.* from 表名 t
rownum:rownum为结果集中每一行标识一个行号,第一行返回1,第二行返回2……
聚合统计:(通过分组函数来实现的,与MySQL一致)
聚合函数:求sum avg max min count
分组聚合:Group by…(having)…
二:连接查询
多表内连接查询:select o.id 业主编号,o.name 业主名称,ot.name 业主类型 from t_owners o,t_ownertype ot where o.ownertypeid=ot.id
左外连接查询:
SQL1999标准语法:select ow.id,ow.name,ac.year,ac.month,ac.money from t_owners ow left join t_account ac on ow.id=ac.owneruuid
Oracle特有语法:select ow.id,ow.name,ac.year,ac.month,ac.money from t_owners ow,t_account ac where ow.id=ac.owneruuid(+)
右外连接查询:+放在左边
三:子查询
①:where子句中的子查询:
(单行)select * from T_ACCOUNT where year=’2012’and month=’01’ and usenum >( select avg(usenum) from T_ACCOUNT where year=’2012’ and month=’01’ )
(多行)select * from T_OWNERS where addressid in ( 1,3,4 ) (可以使用in not in like )
②:from子句中的子查询:
select * from (select o.id 业主编号,o.name 业主名称,ot.name 业主类型 from T_OWNERS o,T_OWNERTYPE ot where o.ownertypeid=ot.id) where 业主类型=’居民’
③:select子句中的子查询:
select id,name,(select name from t_address where id=addressid) addressname from t_owners
四:分页查询
简单分页:select * from (select rownum r,t.* from T_ACCOUNT t where rownum<=20) where r>10
基于排序的分页:select * from
(select rownum r,t.* from
(select * from T_ACCOUNT order by usenum desc) t
where rownum<=20 )
where r>10
五:单行函数
①:字符函数
求字符串长度的函数:select length(‘ABCD’) from dual;
求字符串的子串 SUBSTR:select substr(‘ABCD’,2,2) from dual;
字符串拼接 CONCAT:select concat(‘ABC’,’D’) from dual; select ‘ABC’||’D’ from dual;
②:数值函数:
四舍五入函数 ROUND:select round(100.567) from dual
截取函数 TRUNC:select trunc(100.567) from dual
取模 MOD:select mod(10,3) from dual
③:日期函数:
select sysdate from dual
加月函数 ADD_MONTHS :在当前日期基础上加指定的月:select add_months(sysdate,2) from dual
求所在月最后一天 LAST_DAY:select last_day(sysdate) from dual
日期截取 TRUNC:select TRUNC(sysdate,’yyyy’) from dual
④:转换函数:
数字转字符串 TO_CHAR:select TO_CHAR(1024) from dual
日期转字符串 TO_CHAR:select TO_CHAR(sysdate,’yyyy-mm-dd’) from dual
字符串转日期 TO_DATE:select TO_DATE(‘2017-01-01’,’yyyy-mm-dd’) from dual
字符串转数字 TO_NUMBER:select to_number(‘100’) from dual
⑤:其他函数:
空值处理函数 NVL 用法:NVL(检测的值,如果为 null 的值);
select NVL(NULL,0) from dual
空值处理函数 NVL2 用法:NVL2(检测的值,如果不为 null 的值,如果为 null 的值);
select PRICE,MINNUM,NVL2(MAXNUM,to_char(MAXNUM) , ‘不限’) from T_PRICETABLE where OWNERTYPEID=1
条件取值 decode:select name,decode( ownertypeid,1,’居民’,2,’行政事业单位’,3,’商业’) as 类型 from T_OWNERS
上边的语句也可以用 case when then 语句来实现:
select name,(case
when ownertypeid= 1 then ‘居民’
when ownertypeid= 2 then ‘行政事业’
when ownertypeid= 3 then ‘商业’
end )
from T_OWNERS
六:行列转换

七:分析函数
RANK 相同的值排名相同,排名跳跃
select rank() over(order by usenum desc ),usenum from T_ACCOUNT
DENSE_RANK 相同的值排名相同,排名连续:
select dense_rank() over(order by usenum desc ),usenum from T_ACCOUNT
ROW_NUMBER 返回连续的排名,无论值是否相等:
select row_number() over(order by usenum desc ),usenum from T_ACCOUNT
用 row_number()分析函数实现的分页查询相对三层嵌套子查询要简单的多:
select * from
(select row_number() over(order by usenum desc )
rownumber,usenum from T_ACCOUNT)
where rownumber>10 and rownumber<=20
八:集合运算
··UNION ALL(并集),返回各个查询的所有记录,包括重复记录。
··UNION(并集),返回各个查询的所有记录,不包括重复记录。
··INTERSECT(交集),返回两个查询共有的记录。
··MINUS(差集),返回第一个查询检索出的记录减去第二个查询检索出的记录之
后剩余的记录。
①:什么是集合运算:
②:并集运算:
③:交集运算:
④:差集运算:
select * from t_owners where id<=7
union all
select * from t_owners where id>=5

····Oracle对象
一、视图
创建或修改视图语法
CREATE [OR REPLACE] [FORCE] VIEW view_name
AS subquery
[WITH CHECK OPTION ]
[WITH READ ONLY]

删除视图语法DROP VIEW view_name键保留表:键保留表是理解连接视图修改限制的一个基本概念。该表的主键列全部显示在视图中,并且他们的值在视图中都是唯一且非空的。也就是说,表的键值在一个连接视图中也是键值,那么就称这个表为键保留表。

二、物化视图
物化视图与普通视图的相比的区别是物化视图是建立的副本,它类似与一张表,需要占用存储空间。而对一个物化视图查询的执行效率与查询一张表是一样的。
创建物化视图语法:
CREATE METERIALIZED VIEW view_name
[BUILD IMMEDIATE | BUILD DEFERRED ]
REFRESH [FAST|COMPLETE|FORCE]
[
ON [COMMIT |DEMAND ] | START WITH (start_time) NEXT
(next_time)
]
AS
subquery

手动刷新物化视图:
begin
DBMS_MVIEW.refresh(‘MV_ADDRESS’,’C’);
end;

注意:创建增量刷新的物化视图,必须:
1. 创建物化视图中涉及表的物化视图日志。
2. 在查询语句中,必须包含所有表的 rowid ( 以 rowid 方式建立物化视图日志 )

三、序列
create sequence 序列名称
NEXTVAL 返回序列的下一个值
CURRVAL 返回序列的当前值
CREATE SEQUENCE sequence //创建序列名称
[INCREMENT BY n] //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是 1
[START WITH n] //开始的值,递增默认是 minvalue 递减是 maxvalue
[{MAXVALUE n | NOMAXVALUE}] //最大值
[{MINVALUE n | NOMINVALUE}] //最小值
[{CYCLE | NOCYCLE}] //循环/不循环
[{CACHE n | NOCACHE}];//分配并存入到内存中
四、同义词
create [public] SYNONYM synooym for object;
五、索引
1\普通索引:create index 索引名称 on 表名(列名);
2\唯一索引:create unique index 索引名称 on 表名(列名);
3\复合索引:create index 索引名称 on 表名(列名,列名…..);
4\反向键索引:create index 索引名称 on 表名(列名) reverse;应用场景:当某个字段的值为连续增长的值
5\位图索引:create bitmap index 索引名称 on 表名(列名);使用场景:位图索引适合创建在低基数列上
位图索引不直接存储 ROWID,而是存储字节位到 ROWID 的映射
优点:减少响应时间,节省空间占用

····Oracle 编程:

一、PL/SQL
[declare
– 声明变量
]
begin
– 代码逻辑
[exception
– 异常处理
]
end;

声明变量的语法:
变量名 类型(长度);

变量赋值的语法:
变量名:=变量值

变量:select 列名 into 变量名 from 表名 where 条件
属性类型:%TYPE 引用型

异常:
NO_DATA_FOUND 使用 select into 未返回行
TOO_MANY_ROWS 执行 select into 时,结果集超过一行
语法结构:
exception
when 异常类型 then
异常处理逻辑
条件判断:
if 条件 then
业务逻辑
elsif 条件 then
业务逻辑
else
业务逻辑
end if;

循环:
无条件循环:
declare
v_num number:=1;
begin
loop
dbms_output.put_line(v_num);
v_num:=v_num+1;
exit when v_num>100;
end loop;
end ;
条件循环:
while 条件
loop
end loop;

for循环
基本语法
for 变量 in 起始值..终止值
loop
end loop;

游标:游标是系统为用户开设的一个数据缓冲区,存放 SQL 语句的执行结果。我们可以把游标理解为 PL/SQL 中的结果集。
在声明区声明游标,语法如下:
cursor 游标名称 is SQL 语句;

使用游标语法
open 游标名称
loop
fetch 游标名称 into 变量
exit when 游标名称%notfound
end loop;
close 游标名称

二、存储函数
存储函数又称为自定义函数。可以接收一个或多个参数,返回一个结果。在函数中我们可以使用 P/SQL 进行逻辑的处理。
CREATE [ OR REPLACE ] FUNCTION 函数名称
(参数名称 参数类型, 参数名称 参数类型, …)
RETURN 结果变量数据类型
IS
变量声明部分;
BEGIN
逻辑部分;
RETURN 结果变量;
[EXCEPTION
异常处理部分]
END;

三、存储过程
创建或修改存储过程的语法如下:
CREATE [ OR REPLACE ] PROCEDURE 存储过程名称
(参数名 类型, 参数名 类型, 参数名 类型)
IS|AS
变量声明部分;
BEGIN
逻辑部分
[EXCEPTION
异常处理部分]
END;
四、触发器
数据库触发器是一个与表相关联的、存储的 PL/SQL 程序。每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle 自动地执行触发器中定义的语句序列。
触发器分类
? 前置触发器(BEFORE)
? 后置触发器(AFTER)

CREATE [or REPLACE] TRIGGER 触发器名
BEFORE | AFTER
[DELETE ][[or] INSERT] [[or]UPDATE [OF 列名]]
ON 表名
[FOR EACH ROW ][WHEN(条件) ]
declare
……
begin
PLSQL 块
End ;

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淮滨站 淮滨邮编 淮滨论坛网 淮滨二高卖女图片 淮滨论坛下载 淮滨婚姻介绍所 信阳到淮滨的火车 滨湖区 滨湖新区 滨湖公园 滨湖 滨湖孔雀城 无锡滨湖区 无锡滨湖 滨湖车展 滨湖龙川里 滨湖明珠 滨湖房价 滨湖国际 合肥滨湖职业技术学院 滨湖车展2019时间表 无锡滨湖区邮编 合肥滨湖车展 合肥滨湖医院 滨湖湿地公园 新滨湖孔雀城 滨湖森林湿地公园旅游 合肥滨湖房价一览表 合肥滨湖学院 碧桂园滨湖城 滨湖公园旅游 合肥滨湖会展中心 合肥滨湖车展2019时间表 合肥滨湖国际会展中心 滨湖寿春中学 合肥滨湖房价 合肥市滨湖医院 徐州市滨湖公园旅游 合肥滨湖车管所电话 无锡市滨湖区 衡水滨湖国际