收藏 分享(赏)

Oracle快速入门手册.doc

上传人:精品资料 文档编号:11010053 上传时间:2020-01-31 格式:DOC 页数:47 大小:11.11MB
下载 相关 举报
Oracle快速入门手册.doc_第1页
第1页 / 共47页
Oracle快速入门手册.doc_第2页
第2页 / 共47页
Oracle快速入门手册.doc_第3页
第3页 / 共47页
Oracle快速入门手册.doc_第4页
第4页 / 共47页
Oracle快速入门手册.doc_第5页
第5页 / 共47页
点击查看更多>>
资源描述

1、第一章 Oracle 入门1.1 安装1.2 系统服务图 1-1 Oracle 数据库系统服务1.3 数据库和实例1.3.1 数据库数据库是磁盘上存储的数据集合。每个数据库都有自己的名字,数据库名是用于区分数据库的一个内部标识,是以二进制方式存储在数据库控制文件中的参数。数据库创建之后不能再修改这个参数。它被写入数据库参数文件 pfile 或 Spfile 中。1.3.2 数据库实例实例是一组后台进程和共享内存。数据库实例是操作数据库的实体,用户通过实例与数据库交互。每个数据库实例都有自己的名字,实例名用来标识这个数据库实例。数据库创建后,实例名可以被修改。它也被写入数据库参数文件 pfile

2、 或 Spfile 中。1.3.3 两者关系数据库是磁盘上存储的数据集合。 数据库可以由一个或多个实例(使用 RAC)装载和打开。实例是一组后台进程和共享内存。实例“一生 ”只能装载并打开一个数据库。数据库名与实例名可以相同。一个数据库对应一个实例的情况下设置成相同的便于标识数据库。但是在8i,9i 的并行服务器中,数据库与实例不存在一一对应关系,而是一对多关系,一个数据库对应多个实例。不过一个用户只能与一个实例相连。1.3.4 数据库物理结构图 1-2 Oracle 数据库的物理结构 参数文件数据库参数文件并不是数据库文件系统中的有效组成部分,因为在启动数据库的时候,参数文件并不直接参与工作

3、。但是数据库参数文件中,记录着数据库控制文件的物理地址,所以要靠它来寻找控制文件。图 1-3 数据库参数文件 文件系统图 1-4 Oracle 数据库的文件系统*.CTL 表示控制文件*.DBF 表示数据文件*.LOG 表示日志文件控制文件用来管理和控制数据文件和日志文件。在启动数据库的时候,启动实例之后,就启动对应的控制文件,接着由控制文件打开数据文件。database amount 就是打开控制文件,database open 是打开数据文件。在 Oracle 中,有两种类型的日志文件:图 1-4 中的 REDO*.LOG 称为联机日志文件,也成为重做日志文件。如果REDO01.LOG 写

4、满则写 REDO02.LOG,REDO02.LOG 写满了写REDO03.LOG,而 REDO03.LOG 写满了又会重新写入 REDO01.LOG,这是联机日志文件中的非归档方式。还有一种称为归档日志文件,是在备份尤其是热备份的时候,一定要选择的一种归档方式。1.4 内存结构当一个 Oracle 实例启动之后,它分配了一个称为 SGA(系统全局区)的内存块图 1-5 Oracle 数据库内存结构1.4.1 缓冲区DB buffer(数据库高速缓冲区)如果每次执行 sql 语句,都要对磁盘数据进行读写,则效率会非常慢。内存中被用来频繁读取数据的部分就称为数据库高速缓冲区。DB buffer 是

5、 SGA 中最大的部分。它又分为以下三个部分:保持缓存池再生缓存池默认缓存池共享池1.4.2 Oracle 相关进程1.5 逻辑结构1.5.1 表空间1.5.2 段1.5.3 盘区1.5.4 数据块第二章 SQL/PLUS 基础1.1 登录账户用 sys/system 账户,以 sysdba 的方式登录,可以解锁其他账户,如:alter user scott account unlock;alter user scott identified by aaaaa;conn scott/aaaaa;注意:密码是纯数字,如 123456 是不对的1.2 帮助SQLhelp indexSQL? SET

6、1.3 替代变量和执行计划A:SQLselect * from dept where deptno=10;SQLselect * from dept where deptno=20;B:SQLselect * from dept where deptno=SQL10SQLselect * from dept where deptno=SQL20A 和 B 得到的结果一样,但 A 中启动两个执行计划,B 中只有一个给用户授权:Grant connet to aaa;第三章 SQL 语言基础1.3.1 语言的分类DDL:数据定语言Create实例:create table abc(a varcha

7、r2(10),b char(10);创建表alter table ChinaCity modify CitySimple null; 修改表字段为空grod table ChinaCity 删除表Alter实例:alter table abc add c number;添加表字段Drop实例:drop table abc;删除表,alter table abc drop column c;删除表中的某一字段DCL:数据控制语言Grant实例:grant select on dept to tt;授权给 tt 用户有查询的权限Revoke实例:revoke select on dept from

8、 tt;收回 tt 用户的查询权限DML:数据操纵语言Select实例:select * from abc;查询 abc 表的值Insert实例:insert into abc(a,b) values(abc,xy);为 abc 表赋值Update实例:update abc set b=ttt;修改 abc 表中所有的 b 改为 tttupdate abc set b=yyy where a=abc;把 abc 表中 a 为 abc 的 b 改为 yyyDelete实例:delete from abc;把表里面的所有数据都情空delete from abc where a=abc;把表里面 a

9、 为 abc 的删除1.3.2 常用的系统函数字符:length 查字符,lengthb 差字节,trim,ltrim 和 rtrim 截掉空格和左右两边空格,substr(abcdefj,2,3)截取字符串,从第二个开始取三个,substr(abcdefg,length(abcdefg)-3+1,3) 答案 efg可变长(varchar2(10))的存多少字符长度就为多少,对于不可变长的(char(10)),没有存满也是原本定的长度所以为了避免不必要的浪费,一般定义为可变长日期:sysdate 当前时间, current_date 查询当前时间,alter session set nls_d

10、ate_format=dd-mon-yyyy hh:mi:ss;设定时间的格式next_day 指定的某个星期几是几号select next_day(sysdate,星期三) from dual;转换:To_char(sysdate,yyyy-mm-dd hh24:mi:ss)把日期型传唤出字符型,24 小时制To_date(12-3 月-04)把字符型转换成日期型To_number(333)字符型转换成整型聚集函数:Sum()总数,max()最大值,min()最小值,avg()平均值,count() 总记录数其他:select user from dual;查询当前的登录帐号select s

11、um(decode(sex,男,1,0),sum(decode(sex,女,1,0) from 表;统计男为几个,女为几个select a1,nvl(a2,为输入) a2 from 表;如果为空值就表面为输入select * from 表面 order by a1 asc;升序排列select * from 表面 order by a1 desc;降序排列select distinct a1 from 表面;去除重复数据分组语句:select pub, sum(price) from books group by pub;使用 group by 分组查询各出版社的图书价格select pub,

12、sum(price) from books group by pub having sum(price)50;group by 结合 having 查询总金额大于50 的出版社名称select a1,count(a1) from aa group by a1 having count(a1)1;查询 a1 字段重复出现的次数模糊查询: select * from aa where a1 like a_;使用通配符(like)查询 a1 字段中以 a 开头,任意多个字符结尾的数据select * from aa where a1 like %a%;查询表中 a1 有 a 字符的数据表连接:sel

13、ect e.eid 编号 ,e.name 姓名,e.sex 性别,d.name 所在部门 from e inner join d on e.id=d.id;内链接select e.eid 编号,e.name 姓名,e.sex 性别,d.name 所在部门 from e,d where e.id=d.id(+);左链接select e.eid 编号,e.name 姓名,e.sex 性别,d.name 所在部门 from e,d where e.id(+)=d.id;右链接子查询:(无关子查询,相关子查询)select * from e where id in (select id from d

14、where id=e.id and id=03);select * from e where id not in (select id from d where id=e.id and id=03);select * from e where exists (select id from d);判断是否存在结果集select * from e where not exists (select id from d);判断是否不存在结果集select eid,name from e union select id,name from d;把两张表合并成一张,去除重复数据select id from

15、 e intersect select id from d;返回两个 sql 语句中都出现的行insert into e(eid,ename) select id,name from d; 一次从别的表中插入多条记录create table ttt as (select * from e);创建表是复制别的表中的数据进入新表create table t as select eid,ename from e where eid=001;选择 001 的数据复制到新的表里面第四章 PL/SQL 基础PL/SQL 的结构:Declare-声明变量,赋予初值,可选项Begin -具体的操作Except

16、ion -声明,实现异常处理部分end;/实例:dclarex varchar2(10);y integer:=123;z string(10):=123;begin x:=this is;dbms_output.put_line(x 的值为:|x);-|表示连接字符,dbms_output 是一个包,实现与外部的交互,put_line 打印输出;end;/set serveroutput on size 10000;-设置显示输出信息,默认的是不输出,设置字节大小为 10000;量声明:变量声明的内容:赋予变量适当的名称,适当的数据类型,定义变量(标准变量,复合变量) ,控制变量范围命名规则

17、:变量由字符开头,可以包含数字,下划线,$,#等,变量长度范围 130,大小写不区分,变量名不能是系统关键字存储:save c:plsql_01.text;执行: c:plsql_01.text;修改:edit c:plsql_01.text;dbms_output. new_line-表示在新行里面打印输出;和 dbms_output. put 一起使用,也就是dbms_output.put_line分支语句:1、 if 分支语法:if then.elsif.then.elseend if实例:declare a number;b varchar2(10);begina :=2;If a=1

18、 thenb :=a;elsif a=2 thenb :=B;elseb :=c;end if;dbms_output.put_line(b 的值是:|b);-输出end;/2、 case 分支语法:casewhenthenelseend case实例:declare a number;b varchar2(10);begina :=2;casewhen a=1 then b:=A;when a=2 then b:=B;when a=3 then b:=C;elseb:=abc;end case;dbms_output.put_line(b 的值是:|b);-输出end;/循环语句:1、 基本

19、循环(loop)语法:LoopEnd loop实例:DeclareX number;BeginX:=0;LoopX:=x+1;If x=3 thenExit;End if;Dbms_output.put_line(内:x=|X);End loop;Dbms_output.put_line(外:x=|X);End;/2、 while 循环语法:while expression loopEnd loop;实例:DeclareX number;BeginX:=0;While x-设置标记X:=x+1;Dbms_output.put_line(x);If x“ + rs.getString(1) +

20、“+rs.getString(2)+“);catch (SQLException ex2) ex2.printStackTrace();catch (Exception ex2) ex2.printStackTrace();finallytry if(rs != null)rs.close();if(stmt!=null)stmt.close();if(conn!=null)conn.close();catch (SQLException ex1) 在这里要注意,在执行前一定要先把 oracle 的驱动包放到 class 路径里,否则会报错的。四:函数 基本语法:Create or repla

21、ce function function_name(argument1 mode1 datatype1,-参数argument2 mode2 datatype2, -参数.) -参数Return datatype -返回值类型Is|asPl/sql block; -语句块4.1 创建无参函数:Create or replace function countBagReturn numberIsN number;BeginSelect count(*) into n from T_Bag;Return n;End;4.2 调用函数:方法一(sql 语句中直接调用):Select countBag

22、from dual; -无参调用-Select countBagByBrand(3) from dual; -有参调用方法二(使用变量接受函数返回值):Var n1 numberExec :n2:=countBagPrint n1-Var n1 numberExec :n2:= countBagByBrand(3)Print n1方法三(使用包 DBMS_OUTPUT 调用函数):Set serveroutput onExec dbms_output.put_line(使用 dbms_output 函数调用|countBag);-Set serveroutput onExec dbms_out

23、put.put_line(使用 dbms_output 函数调用| countBagByBrand(3);4.3 创建带参函数Create or replace countBagByBrand(brandid number)Return numberIsN2 numberBeginSelect count(*) into n2 from T_Bag where bagbrandid=brandid;Return n2;End;4.4java 中调用:第六章 视图、同义词、序列一:视图1.视图的概念:视图实际上是一条查询语句,是数据的显示方式,降低语句的复杂性,使语句可读性更强,不占用实际空间。

24、2.视图的作用:安全性(利用视图限制用户访问表中行列的权利,限制用户向表中插入数据的权利)方便性(利用视图封装更为复杂的查询语句,生成报表更为简单)一致性(提高效率的作用)3.创建视图的语法:实例:Create or replace view myviewAsSelect * from books;/创建带条件的视图:Create or replace view myviewAsSelect * from books where price30With check option; -表示检查视图的选项,也就是 where 条件,如果大于 30 的话就插入数据,小于就不行/往视图中插入数据:实例

25、:Insert into myview values(0007,sdfdf,23,5,df);如果组成视图的表是两个或者两个以上的话,不能更新视图,需要更新的话要满足一定的条件。 (解决办法要等到替代触发器),如果视图中包含聚合函数也是不可以更新的创建只读视图:Create or replace view_read -之前存在就删除AsSelect * from empWith read only; -视图为只读二:同义词(公共同义词,私有的专用的同义词)概念:语法:Create synonym dept for scott.dept; -默认的是私有的专有的同义词,只能当前用户使用Creat

26、e public dept synonym dept for scott.dept; -创建公共的同义词,都可以使用Drop synonym dept; -删除同义词三:序列(相当于 SQL SERVER 中的自增长)语法:Create sequence myscqStart with 1 -希望从几开始Increment by 1 -递增几个Order -排序Nocycle; -不循环,避免相同,但会影响性能Select myscq.nextval from dual; -序列的下一个值Select myscq.curruval from dual; -当前的值把序列应用到某个表里面:Cre

27、ate table auto(a number,b varchar2(10);Insert into auto values(myscq.nextval,adf); -对 auto 表中的 a 列加入序列,实现自增修改当前序列的递增量Alert sequence myscqIncrement by 3; -序列只能修改递增量,不能修改当前值查询当前用户的序列:Select sequence_name from user_sequence;查询某个用户的序列:select SEQUENCE_OWNER,SEQUENCE_NAME from dba_sequences where sequence

28、_owner=SCOTT;创建用户语法:CREATE USER username IDENTIFIED BY 密码;修改密码:alter user scott identified by scott11;修改用户帐号为锁定:Alter user scott account lock; -解锁 unlockSysdba 给 test 授予对 scott.dept 的查询的功能,同时 test 也可以把对 scott.dept 的查询功能授权给别的用户:grant select on scott.dept to test with grant option;第七章 触发器1、触发器的概述、分类需要

29、触发事件,触发对象,触发条件,执行触发的语句体2、事务2.1 什么是事务?事务是数据库中重要的机制,用于确保数据完整性和并发处理的能力,它将一条/一组 SQL 语句当作成一个逻辑上的单元,用于保障这些语句都成功/失败。2.1 事务的特性?事务具有 ACID 四大特性:A(Atomicity)原子性:是一个逻辑的单元,不可分割的,只有成功和失败两种可能,如果一方失败就都失败。 (手段)C(Consistency)一致性:操作的前后让数据保持一致。 (目的,也就是以原子性的手段达到一致性的目的)I(Isolation )隔离性:以加锁的方式保证数据的完整。 (隔离性越强并发性就越弱)D(Durab

30、ility)永久性:对同一个事务而言,一旦提交就不能回滚,一旦回滚就不能提交。3、 行级触发器工作原理和设计应用实例:Create or replace trigger del_deptid -创建一个触发器After delete on deptment -删除动作,对 deptment 做触发器For each row -循环,对每一行做触发BeginDelete from emp where id=:old.id;End del_deptid;/触发器创建完成后,再删除Delete from deptment where id=01;这样两张表都删除了数据增加:Create or rep

31、lace trigger insert_deptid -创建一个触发器After insert on deptment -增加动作,对 deptment 做触发器For each row -循环,对每一行做触发BeginInsert into emp(eid,ename,id) values(121,dffd,:new.id);End;/创建完后,增加:Insert into deptment values(77,dfd);这样两张表都插入了数据修改:Create or replace trigger update_deptid -创建一个触发器After update on deptment

32、 -增加动作,对 deptment 做触发器For each row -循环,对每一行做触发BeginUpdate emp set id=:new.id where id=:old.id;End;/创建完后,修改:Update deptment set id=yy where id=01;这样两张表都插入了数据判断删除:Create or replace trigger books_deleteAfter delete on booksFor each rowBeginIf :old.books_id=0001 then -设置 0001 不能呗删除Raise_applichtion_erro

33、r(-20000,不允许删除!); -只能写-20000-20999 别的不可以End if;End;/创建完后,删除:Delete from books where books_id=0001; -不能呗删除,别的编号可以4、 语句级触发器的设计应用实例:先创建表:(创建一个特殊表,记录哪个用户在哪个时间做了哪个动作)Create table mylog(curr_user varchar2(100),curr_date date,act char(1);再创建触发器:Create or replace trigger dml_aaAfter insert or delete or upda

34、te on aa -在 aa 表上做的记录,后触发BeginIf inserting thenInsert into mylog values(user,sysdate,I);Elsif deleteing thenInsert into mylog values(user,sysdate,D);ElseInsert into mylog values(user,sysdate,U);End if;End;/显示转换(时间转换成字符串):Select curr_user,to_char(curr_date,yyyy-mm-dd hh24:mi:ss) d from mylog;结合触发器利用序

35、列实现自增:Create or replace trigger set_no Before insert on auto -对 auto 做触发器For each rowDeclareSn number(5); -定义变量BeginSelect myseq.nextval into sn from dual; - myseq.nextval 是一个序列,把它放到变量里面:new.a:=sn;End;/创建完后,增加数据:Insert into auto values(32,dfg); -32 是无效的,会被序列中的数据替代5、 替换触发器应用使用替换触发器解决视图中多张表的数据更新实例:Cre

36、ate or replace trigger tr_v_e_d Instead of insert on v_emp_dept -针对 v_emp_dept 视图的增加触发器For each rowBeginInsert into deptment values(:new.id,:new.name); -分别操作两个基表,首先是 deptment,使用 new 这个表Insert into emp(eid,ename,sex,id) values(:new.eid,:new.ename,:new.sex,:new.id);-再针对 emp 表,由于两个表里面都要 deptment 编号,作为连

37、接条件,为了公共匹配,向 emp 中插入数据时也要不过来End;/创建完后,插入数据:Insert into v_emp_dept values(456,test,r,33,gh第八章 安全管理8.1 用户管理8.1.1 创建CREATE USER “test“ PROFILE “DEFALUT“ IDENTIFIED BY “test12345“ DEFAULT TABLESPACE ttACCOUNT UNLOCK;8.1.2 授权前提:登录到具备权限的账户下才能做以下授权GRANT connect TO test; 对象授权GRANT SELECT ON scott.dept TO te

38、st WITH GRANT OPTION;为可选部分,如果省略,则 test 只能查询 scott.dept,如果不省略,则 test 还可以将对 scott.dept 的查询授权给其他账户。一般来讲,这个选项不建议使用。如果是表,SELECT 部分还可以使用 INSERT DELETE UPDATE ALL如果是过程,SELECT 部分要改成 EXECUTE 系统授权GRANT CREATE USER TO test WITH ADMIN OPTION;GRANT DROP USER TO test; 解除授权REVOKE SELECT ON scott.dept FROM testREVO

39、KE CREATE USER FROM test8.1.3 管理前提:登录到具备权限的账户下才能做管理更改默认表空间:ALTER USER test DEFAULT TABLESPACE tt ;更改密码:ALTER USER test IDENTIFIED BY test54321;锁定/解锁:ALTER USER test ACCOUNT LOCK/UNLOCK;8.2 角色管理8.2.1 创建CREATE ROLE myrole;8.2.2 授权GRANT SELECT ON scott.dept TO myrole WITH GRANT OPTION;8.2.3 将角色分配给账户GRA

40、NT myrole TO test;8.3 概要文件概要文件主要是账户登录时的一些配置信息,比如:口令的有效期CPU 会话并行会话数主要是影响性能和安全的一些配置。下午作业:创建一个账户,只授权了 connect,没有授权 dba 看是否可以 as sysdba 登录?可以登录 某个用户有 insert 和 select 权限,创建一个角色有 select 和 insert 功能,把这个角色分配给用户,查看把角色移除了,这个用户是否还有 insert 和 select 权限?还存在 insert 和 select 权限,因为即使删除了角色,但用户当前的 insert 和 select 功能还存

41、在两个用户分别建同名的表放在同一个表空间,是否可以?可以,和表空间没有关系,不会有阻碍一个用户能不能在两个不同的表空间建两个表 A?不可以用户的默认表空间是 tabsA 的时候,建了 10 个表,这 10 个表在 tabsA 对应的数据文件上;用户的默认表空间是 tabsB 的时候,建了 5 个表,这 5 个表在 tabsB 对应的数据文件上,假设我们将tabsA 对应的数据文件导到另一台电脑的 toracle,能看到几张表?用户的默认表空间是 tabsA 的时候,建了 1 个表并插入 10 条数据, ;更改用户的默认表空间是tabsB 的时候,还在这个表里插入 5 条数据,假设我们将 tab

42、sB 对应的数据文件导到另一台电脑的toracle,能看到这张表吗?如果能看到,有几条数据呢?自增长:自增长怎么做、创建一个序列:Create sequence myscqStart with 1 -希望从几开始Increment by 1 -递增几个Order -排序Nocycle; -不循环,避免相同,但会影响性能Select myscq.nextval from dual; -序列的下一个值Select myscq.curruval from dual; -当前的值创建表:Create table auto(a number,b varchar2(10);把表中的 a 列加入序列:Ins

43、ert into auto values(myscq.nextval,a); -对 auto 表中的 a 列加入序列,实现自增约束:只能是指定的一些值?Check 约束:Alter table emp add constraint ck_emp_sex CHECK(sex =男 or sex =女);只能是某个范围的值?Check 约束:Alter table emp add constraint ck_emp_age CHECK(age 18 or sex 150);只能是某个样子的值(Email)?默认值?外键引用?Alter table mm add constraint fk_mn foreign key(n1) refernces nn(n1); -nn 表中的 n1 和 mm 表中的n1 是主外键

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报