1、oracle数据库的创建流程:1.首先登陆到开发工具2.创建表空间(一个表空间至少有一个数据文件存在,否则此表空间没有存在的价值)A:创建语法create tablespace 表空间名 datafile 数据文件的物理地址(目录和文件全名) size 大小设置表空间状态:alter tablespace 表空间名 offline/onlineB:修改表空间文件大小语法alter database datafile 文件的物理地址 resize 大小C:向表空间中添加数据文件的方法alter tablespace 表空间名 add datafile 文件的物理地址 size 大小D:删除表空间
2、drop tablespace 表空间名(此时,只是从数据库中删除了表空间的信息,删除了数据文件和数据库的关联,但是,数据文件仍旧会在物理磁盘上存在)drop tablespace 表空间名 including contents and datafiles(此时,数据文件也就一同删除)3.创建用户A:创建的同时指定默认表空间create user 用户名 identified by “密码“ default tablespace 表空间名B:先创建再指定默认表空间create user 用户名 identified by “密码“ alter user 用户名 default tablespa
3、ce 表空间名C:删除用户A:用户方案下没有数据库对象drop user 用户名B:用户方案下有了数据库对象drop user 用户名 cascade4.给用户分配表空间使用限额(未授权dba权限的用户)alter user 用户名 quota 大小(unlimited表示无限制权限就是dba的权限) on 表空间5.给用户分配权限(系统权限和对象权限)(1)系统权限(create/alter/drop)A:授权grant 权限 to 用户名权限就是数据库操作一系列内容B:收回权限revoke 权限 from 用户名(2)对象权限(select/update/add/delete)A:思想如果
4、当前用户希 操作 用户的数据,则 对象权限的分配 B:前 只有数据库对象的 有 , 对象权限的分配 C:分配grant 对象权限 on 方案名.表名 to 用户revoke 对象权限 on 方案名.表名 from 用户:系统权限 的是 物 ,对象权限则是 物 物的 是commit( )/rollback(回 )6: 数据库的一系列操作(1)建表:先建表再添加 创建:create table 方案名.表名 (列表 not null和default 值)据有表创建表(据currency1创建表)create table 方案名.表名asselect 语“此时创建的表中 有 (2)添加 alter
5、table 方案名.表名add constraint 名 的fi 的fl件 :alter table 方案名.表名add constraint pk_ 名 primary key( )一 :alter table 方案名.表名add constraint u_一 名 unique(名)currency1 :alter table 方案名.表名add constraint ck_ 名 check(fl件) :alter table 方案名.表名add constraint fk_ 名 foreign key() references方案名.表名( )有联删除的 :alter table 方案名.
6、表名add constraint fk_ 名 foreign key() references方案名.表名( ) on delete cascade没有修改,只 删除建 删除 alter table 表名 drop constraint 名:当表中”存在数据了,再添加 时, 会 ”存在的数据是否 fl件 如果有 fl件的数据, 创建 用 alter table 方案名.表名 disable constraint 名用 alter table 方案名.表名 enable constraint 名默认的,用 时,会 当前”存在的数据 如果有数据fl件,仍旧用 此时, ,对有的数据,只加的数据,创建
7、语法如下 示:alter table 方案名.表名 enable novalidate constraint 名:用和用一 用在一个法 的 录存在的 (3) 表的的操作添加alter table 方案名.表名 (add 信息)修改alter table 方案名.表名 (modify 信息)修改表的alter table 方案名.表名 modify 列名 名修改表的名 alter table 方案名.表名 rename column 旧列名 to 列名删除alter table 方案名.表名 (drop column 名)修改表名 alter table 方案名.表名 rename to 方案名
8、.名删除表drop table 方案名.表名表一删除,建 在表 上的 信息全 删除 (4)给表的添加 列 ( )语法create sequence 方案名. 列名名 则seq_表 _名列的值A: 下一个值列.nextvalB: 当前值列.currvalC: 在insert语“中使用 列, 在insert语“中 列和个对 insert into 表名删除drop sequence 方案名. 列名7.数据的 删改currency1(1)deleteA: 语法delete 表 where fl件B: 默认的只删除 fl件的数据 , 回 C: 删除数据的方 一:delete:drop table 表名
9、: 表, 回 的全 删除 truncate table 表名-删除表中的全 数据, (2)insertA: 语法insert into 表(列表) values(值的列表)B:Insert的 一:全的添加一fl 录: currency1添加insert into 表(列表) select 语“- select语“中的名和数据fi 列表 一 (3)updateA: 语法update 表名 set 名=值,. where fl件B: currency1 修改 update 表名 set (列表)=(select 语“)- select语“中的名和数据fi 列表 一 (4)删除值-A:用时表先据的
10、录创建一时表 删除表的 有数据时表中制回 删除时表B:用rowid先据指定 分 , 得最大最小的rowid值的集rowid再 得的值的集中的 录删除delete 表名 where rowid not in(select max(rowid) from 表名 group by 名)(5)currency1A: 语法select 列表 from 表 where fl件 group by 分 列表 having fl件 order by 排 B:where和having的区where针对 有 录 匹配 having针对分 录筛 where中 使用函数 having having跟随group by
11、使用C:group by 的 则分 的是select列表的子集 当select只是函数时,分 任 当含有 时,这些 全 包含在group by“中D:多表currency1笛卡尔乘积连接M*N,两个表 连接,得到的 果是两个表中 录的数量乘积 :select 列表 form 表列表内连接 指定fl件的数据 会显示出 select 列表 from 表列表 where fl件select 列表 from 表1 inner join 表2 on fl件完整连接两个表中的数据全 显示出 ,fl件的匹配在一起 fl件的,单独列示 select 列表 from 表1 full outer join 表2
12、on fl件左连接左边表中数据全 显示,右边表中数据只显示 fl件的 select * from 表1 ,表2 where fl件(+)+的 在的表只会显示fl件的数据 select 列表 from 表1 left join 表2 on fl件右连接右边表中数据全 显示,左边表中数据只显示 fl件的 select * from 表1 ,表2 where fl件(+)+的 在的表只会显示fl件的数据 select 列表 from 表1 right join 表2 on fl件连接己跟 己 关联 一个表当 2个表 处理 :表的名的使用 例如:显示员工的编号,姓名, ”理的编号和姓名select e
13、.ename,e.empno,m.ename,m.ename from scott.emp e,scott.emp mwhere e.mgr=m.empno8.试图(1)前 当 杂的currency1语“,反被调用的currency1语“,比较杂的currency1语“,先 这些currency1语“创建 视图,这样反调用即 (2)理解为fi的表 是在服务 上存储currency1语“的数据库对象 (3) 语法create or replace view 方案名.视图名asselect 语“A:前 视图的创建 是DBA 具有视图的创建权限 视图的 有 具有底层表的currency1权限 这个权
14、限 授权B: 名 范v_ 表的名C:名问题在视图中,视图的名默认和select语“的列表时一 的 如果 为视图起名,为 有都指定好名 D:强制视图当视图的创建 无权限,当视图的 有 没有底层表的currency1权限,当视图的底层表存在,当视图的底层存在,默认视图创建 此时,先强制创建 ,只 视图此时是无效的 当权限问题,底层表的问题处理完 ,编译视图, 视图的状态由无效调整 有效 E:视图默认是只读的 F: 视图添加数据实际上是向视图的底层表中添加数据 当底层表是一个表时:底层表中非视图 该允许为空 当底层表是两个表时: 添加处理 G: 视图 修改和删除实际上是向视图的底层表修改和删除数据
15、当底层表是一个表时: 当底层表时两个表时:一次 影响一个底层表(4)删除视图drop view 方案名.视图名(5) :视图的创建 为创建 操作的底层表 授权,即使创建 是dba,也 授权,除非创建 使用 己 的表 试图是为了 强表的安全 生的,例如一些想显示的就 创建视图 隐藏9.同义词(1)理解实质上就是为数据库对象指定一个调用名 (2) 名 范syn_名(3)分A:私有同义词同义词名于 的方案 有 , 有 加调用 :方案名.同义词名B:公有同义词同义词于 的 有 ,被 有用户 调用 :同义词名(4)创建语法A:创建私有同义词create synonym 方案名.同义词名 for 方案名.
16、对象名B:公有同义词create public synonym 同义词名 for 方案名.对象名(5)作用表了 数据库对象currency1时的索流程 select * from 对象名A:先在当前方案用户下找寻是否存在此名 的表视图 B:如果表视图存在,马上在当前方案用户下找寻是否存在此名 的私有同义词 C:如果私有同义词存在,马上找寻是否存在此名 的公有同义词 如果上 步都存在, 示:表视图存在 (6)删除A:删除私有同义词drop synonym 方案名.同义词名B:删除公有同义词drop public synonym 同义词名10.数据索的方 (1)前 数据在数据库中的存储是无 的 (
17、2)数据索方 A:表扫描遍历整个数据堆,currency1找fl件的 录 B:按照索引 扫描先对数据 排 形 索引,再在索引中 匹配 11.索引index(1)理解索引实质上就是一种排 索引是用 存储排 的的值及相 录rowid信息的数据库对象 (2)分A: 用的分适各种数据库B:oracle的索引(3) 用的分A:按照索引 分单列索引:索引建 在一个上索引:索引建 在多个上B:按照排 的顺 分升 索引降 索引C:按照索引 否存储值一索引:索引 存储值非一索引:D:按照索引的存储顺 和索引顺 分聚集索引:的存储顺 和索引顺 是一 的 非聚集索引:的存储顺 和索引顺 是一 的 (4)oracle
18、的索引分A:B-TREE索引B-树索引,是似于 叉树的 构存储索引的信息 则:左边索引的值小于上层索引的值 右边索引的值大于上层索引的值 整了 用的索引fi 是oracle默认的 B:位图索引 bitmap数据库的值转换 0 1的 存储和排 ,便于索速度的 高 适用于存在大量值的 例如 C:函数索引针对函数建 索引(5)创建A: 名 则ind_表的名_名 B:存储问题由于索引实际会存储排 的及rowid的信息, ,索引是 占用存储空间的 制定存储索引的表空间 建议:存储索引的表空间和存储数据的表空间分 C:创建语法B-tree索引:create bitmap index 方案名.索引名 on
19、方案名.表名(列表) tablespace 表空间名位图 :create index 方案名.索引名 on 方案名.表名(列表) tablespace 表空间名: 和一 会 创建一索引 D:索引创建完 ,表中数据 删改时,只 影响到了索引,索引就会 排 :索引只对currency1有好处,但是会降 删改的 E:建 索引的被currency1的索引最好是number会被currency1的 建 索引会被 修改的F:空 空间 分比为了便于索引的数据扫描,强制 出空 空间 默认10% G: 用索引只有索引在wherefl件中出 时,索引 会发生作用 like 匹配默认会 用索引 当%匹配是 一个时,
20、like也会调用索引 索引,like 匹配默认会 用索引 当%匹配是 一个时,只有 索引 会起作用,即wherefl件中出 索引 时 起作用 - 索引是指创建索引的 一个H:删除索引索引没有修改,只 删除建 drop index 方案名.索引名11.数据库的 和 (1)分A:物理 B: (2)物理 A: 在关 服务的 物理磁盘文件的制工作 B: 用 的 工具在数据库 工作的 工作 是DBA的工作 RMAN (3) 和 实质上就是数据的 和 出 exp.exe: 出数据imp.exe: 数据: 数据时, 前创建好用户,分配好权限,建 好表空间 的时 己建的 个用户名和密码12 pl/sql编程1
21、 pl/sql编程(1)理解在 统的sql语“的 上,加 量 量 定义数据fi 及流程 制语“,形 的 构 的sql语“的集 (2)pl/sql的分A:名的pl/sql一次用一次,sql语“没有实 数据库存储 B: 名的pl/sqlpl/sql语“在数据库上存储下 ,反调用 程 函数 发 程 包 程 包(3)pl/sql的 ( 构)一完整的pl/sql的码, 有4 分 A: 分用于会使用到的 量 量 定义数据fi 定义 信息 由declare开currency1,是的 B:程 分用于实 处理 的sql语“ 由begin开currency1,是的 C: 处理 分用于 和处理在程 分“生的 由ex
22、ception开currency1,是的 D:程 分end;表示整个pl/sql的 (4)pl/sql的 则A:最 单的pl/sql的 构是由begin end; B:declare,begin,exception关的都没有分号,只有在 时, 有分号完 C:在pl/sql中, 码的 仍旧分号表示 D:在pl/sql中,select再是currency1, 是为 量fi值 E:在pl/sql中使用 fl fl:- fl:/* */2 pl/sql的(1)作用用于在程 分使用的 量 量 定义数据fi 定义 信息 (2) 则在pl/sql中 强制的则 程 分使用的 量 先 同时, 时用到的 量,也
23、前 (3) declare语“量名 数据fi (null | not null) :=值量名 数据fi constant :=值:A:如果为非空则fi 值如果为空则用fi值,此时 量具有默认值, 值为nullB:如果 接收用户 的值 fi值的,则使用如下 :量名 数据fi:=var_emp scott.emp%rowtype;5.pl/sql的流程 制语“(1)分A:顺 B:分C:(2)分A:ifB:case(3)A:forB:loop(4)ifA: 构if fl件表 then语“else语“end if;B:多fl件 if fl件表 then语“elsif fl件表 then语“else语“
24、end if;:此时的elseif少了一个e, 为elsif (5)caseA: 构case when fl件表 then语“when fl件表 then语“end case(6)A:for适用于次数 的 下 构for 量 in 最小值最大值 loopend loop;for 量 in reverse 最小值最大值 loopend loop;: 量只是在for内 存在 B:while 先 fl件,再 while fl件表 loop(用 为 量fi值)end loop;C:loop先 再 出fl件的loop出fl件(一 为 exit when 名%notfound)end loop;14 cur
25、sor(1)理解fl的从 果集中 录的工作制 : 是一种数据库对象,是 量 (2)分A: 数据库对象B: 数据fi(3)生 A:在declare中 cursor 名 (数列表) is(as)select语“B:开在begin 分开 open 名(数fi值)C: 录在begin 分 具的 录信息 fetch into 量D:关 在begin 分关 close 名(4) 的关A: 是否开名%isopen回Boolean的值 在一个生 中,只 开一次 B: 中是否有 录存在名%found如果有 录存在, 回true C: 中是否没有 录存在名%notfound如果没有 录存在, 回true D: 回
26、 的 录 数名%rowcount(5)使用样例- jobs表的 有 录declare- cursor cur_jobs is select * from hr.jobs;-接收 录的 量var_jobs hr.jobs%rowtype;begin-开 - open cur_jobs;- 录/*fetch cur_jobs into var_jobs;-是否 录存在while cur_jobs%found loopdbms_output.put_line(var_jobs.job_id);- 下 录fetch cur_jobs into var_jobs;end loop;*/-/*loopfe
27、tch cur_jobs into var_jobs;-出fl件exit when cur_jobs%notfound;dbms_output.put_line(var_jobs.job_id);end loop;*/- forfor i in cur_jobs loopdbms_output.put_line(i.job_id); end loop;- dbms_output.put_line( 有:|cur_jobs%rowcount|fl 录);-关 -close cur_jobs;end; :只 有 ,就一定 有接收 的单fl 录 量存在 15 exception(1)oracle的
28、A:语法 是 该加 的 B: 该加处理的 C:error 接 程 的 (2) A:分系统 定义 用户 定义 B:系统 定义 当sys用户登陆 下,在standard包下 得系统 定义信息 C:使用 在exception中,用于 程 分“生的 exceptionwhen fi then语“when fi then语“ when others then语“: 是具的 , 在最前 others 有的 ,但是只 在 处理 分的最 如果使用了Others , 两个系统 量 得 的具信息 sqlerrm: 得当前 的描信息sqlcode: 得当前 的 编号(3)用户 定义 A:生 定义 发 定义 处理 定
29、义 B: 定义 是在declare中 C:发 定义 在Begin 分中,“生 己 定义的状 时, 发 raise 定义 D:处理 定义 在exception中实 (4)使用样例-据用户 的最 工 得工作名 declarevar_min number;var_title hr.jobs.job_title%type;begin-接收用户 的最 工 var_min:=- 得对 的名 select job_title into var_title from hr.jobs where min_salary=var_min;dbms_output.put_line(var_title);excepti
30、on/* when no_data_found thendbms_output.put_line(没有找到数据);when too_many_rows thendbms_output.put_line(数据 多); */ when others then dbms_output.put_line(sqlco; end;16 名的pl/sql1. 名的pl/sql(1)理解在数据库上按照一的名 pl/sql语“的存储 (2)分存储 程 函数 发 程 包 程 包2 存储 程procedure(1)理解存储在数据库服务 上的,实 定 的,被反调用的pl/sql语“的集 (2)分A:无 程B:有数的
31、程数的 程 in出数的 程 out(3)语法create or replace procedure 方案名. 程名(数列表)as|is语“()begin分exception处理 分end 程名;(4)调用A:execute 方案名. 程名(为数fi值)有 数, 为 数fi值有 出数, 先一个 出数相同fi的 量 接收 B:pl/sql的调用方 C: 为 数fi值的方 :按照数的顺 fi值按照数名 的fi值:数名=具的值( ,这 只适没有 出数的)试样例:17 函数function1. 理解存储在数据库服务 上的,具有 回值的,被反调用的pl/sql语“的集 2. 分系统 定义函数用户 定义函数
32、3. 系统 定义函数(1)数值函数A:ceil: 回大于 于给定数值的最小整数floor: 回小于 于给定数值的最大整数(除法 整也用此函数 实 )B: modC:round: trunc: (2)处理函数lpad :在的左边添加指定的rpad:在的右边添加指定的(3)函数A:和数 加 ,得到的是一个的 会 为数”的 据 B:两个间 法,得到的是 会时分 也 C:给指定添加 add_monthsD:两个间希 据 months_between(4)转换函数 A:转换 to_date()B:转换 to_char()C:转换 数to_number()4 定义函数A:语法create or repla
33、ce function 方案名.函数名(数列表)return 回值的数据fiis 分begin分exception分end 函数名;B: :一:在 分至少 一个表 回值的 量 此 量的数据fi就是 回值的数据fi :在程 分处理完 , 用:return 表 回值的 量;实 回处理 C:调用Pl/sql的调用方 declarevar_num number;/接收 回值的 量,这是的 begin-var_num:=func_jisuan(select func_jisuan(dbms_output.put_line(var_num);end;先一个 回值的数据fi相同fi的 量 接收 D:流号的函
34、数:hygj201210110001思 :先 得当前表中最大编号,是否是 的编号 如果是,表这次添加的是 的 一fl 如果是 , 的值 加1.E.流号函数的实 - 得流号的函数create or replace function func_liushui return varchar2 is-表 回值的 量var_liushui varchar2(16);-表当前最大编号的 量var_max varchar2(16);begin- 得当前的最大编号select max(id) into var_max from liushui;-是否为空if var_max is null then-表这是
35、添加的 一flvar_liushui:=hygj|to_char(sysdate,yyyymmdd)|0001;else-最大编号的是否和 一 if substr(var_max,5,8)-to_char(sysdate,yyyymmdd)=0 then-表示同一 , 的值再加1var_liushui:=hygj|to_char(sysdate,yyyymmdd)|lpad(substr(var_max,13)+1,4,0);else-是同一 ,表示这是 的 一flvar_liushui:=hygj|to_char(sysdate,yyyymmdd)|0001; end if; end if;
36、return var_liushui;end func_liushui;/18 程 包和程 包packagepackage body1.理解程 包:用于统一理多个 程和函数及 定义fi 信息的数据库对象 程 包:具实 程 包中的 程和函数的数据库对象 程 包和程 包就是一种和实 的关系 程 包和程 包的 构完全一 的 2.程 包的语法create or replace package 方案名.包名is定义数据fi的公 量和 量的函数的程的end 包名; 3.程 包的语法create or replace package body 方案名.包名is 实 程 包中的 程和函数end 包名;:程 包
37、中 实 的 程和函数的 构和程 包中的 构完全一 4. 定义数据fiA:的则先再使用B:的语法type 定义fi名 is 数据fi:如果的 数据fi是数据fi 是数据库对象的(例如 ), 在 前加上关ref 5.分 的实 create or replace package mypack_jobs is-表 显示 录数的 量con_pageSize constant number :=5;- 定义 数据fitype type_cur is ref cursor; - ref关的使用- 得 数的函数function func_totalPage return number;-实 分 的 程proc
38、edure fenye(currPage number,results out type_cur);end mypack_jobs;/create or replace package body mypack_jobs is-实 得 数的函数function func_totalPage return numberis-表 回值的 量var_result number;- 录数的 量var_totalRow number;begin- 得 录数select count(*) into var_totalRow from jobs ;- 数var_result:=ceil(var_totalRo
39、w/con_pageSize);return var_result;end func_totalPage; -实 分 的 程procedure fenye(currPage number,results out type_cur)is-表开位置和 位置的 量var_start number;var_end number;begin- 出数的 程, 质是为 出数fi值- 在的 出数实质上是一个 fi的 量,为 fi 量-fi值,无非就是 select语“- 时,是在开 量的同时 select语“- 想 得select语“, 先 道开和 位置var_start:=(currPage-1)*con_
40、pageSize+1;var_end:=currPage*con_pageSize;open results for select job_id,job_title,min_salary,max_salaryfrom (select j.*,rownum rn from hr.jobs j where rownum=var_start;end fenye; end mypack_jobs;/18 发 trigger(1)理解存储在数据库服务 上, 的,实 定 的pl/sql语“的集 (2)作用A:实 数据库 值的处理B:限制数据操作C: 数据的联更D: jobs 在一起,实 数据库的 处理(D
41、BA的工作)(3)分A: 于发对象的分发 是建 在种fi的对象上 表发 视图发 用户发 数据库发 B: 于发 作的分insert发 update发 delete发 C: 于发时的分before前反 发 after反 发 D: 于发的分发 :for each row语“发 (4)发 的点A:发 是 的 当对于发对象 响 操作时,发 就会 B:发 没有 数也没有 回值 C:发 中允许出 任何的 务处理语“ D:发 会 当前 的是种发 作 insert-insertingupdate-updatingdelete-deleting个 量都是booleanfi的值 (5) 发 的工作理A:当 添加操作
42、时,发 会 在缓存上创建一名为:new的虚拟 录,存储当前用户的添加的信息 当 commit时,会 :new的 录真 添加到数据库中 roolback时, 接清空:new B:当 删除操作时,发 会在缓存上创建一和底层表 构完全一 的:old虚拟表,存储当前被删除的录信息 当 coomit,时, 接清除:old,实 录的删除 rollback时, :old的信息再制回表 C: 修改处理时,的信息存储在:new中,前的信息存储在:old中 (6)语法create or replace trigger 方案名.发 名before|afterinsert or update or deletefor
43、 each rowon 方案名.表名begin语“end 发 名;(7)oracle的 A:error是 接 整个 用程 的 B:oracle的 分 系统 定义 和用户 定义 C: 的 :编号:20000内的 编号”被oracle占用了 信息:D:用户 定义 raise_application_error( 编号, 信息): 编号 从20001开, 有- 编号的 :-编号(8)删除发 A:drop trigger方案名.发 名B:drop table 方案名 .表名(9)用和用发 alter trigger 方案名.发 名 disable;alter trigger 方案名.发 名 enabl
44、e;(10) 锁(1)理解用 解决数据库并发问题的工作制 (2)分A: 享锁默认的select就会为数据设置 享锁 B:只读锁用户对当前 录只 读 更改 C:独占锁用户 对当前 录 任何处理 D:死锁(3)解锁commitrollback 19 项(1) 程 包中的函数如果有数加号,没有数则 加号,程 包同 (2) 脏数据:在缓存中 没有被 的数据(3) oracle中 值的实 方 有 种:A: 建 使用 列实 B:在存储 程中实 C:在发 中实 前 :都得 己先建 一个 列 (4) oracle中的 是数据库对象, 使用 为数据fi,就 它 定义为数据fi,在java中调用的使用 先 册 fi,一 操作是:rs.RegisterOutParameter(1,oracle.jdbc.OracleTypes.Cursor),然 得 果时, 先 得object,然强制转 为ResultSet, 操作码如下:rs=(ResultSet)call.getObject(1) ,册和 得 果的编号 该一 (5) 在pl/sql语“中如果没有 给 fi的 量fi值, 的值为null,此时的null 同于false(6) rownum伪劣先小于 得一定范围再做 (7) 试图实 数据的安全,但是对底层表的currency1权限 授权,有表的 有 授权,即使dba也得这做