Oracle复习:1.一个数据库由多个表空间组成。
表空间由多个数据文件组成,表空间中其他逻辑结构的数据存储在这些数据文件中。
一个表空间只属于一个数据库。
表空间是有数据库的逻辑划分。
Oracle包含了表,索引,视图,过程,函数,包等对象。
Oracle数据库内部结构包括:表空间,表,列,分区,同义词,用户,索引,视图,权限,角色,段,盘区,块。
数据块是最小的储存单元。
一个数据库至少需要两个重做的日志文件。
控制文件:用以记录与描述数据库的外部结构。
包括(Oracle数据库名称与建立时间,数据文件与重置日志文件名称及其所在位置,日志记录序列码(log sequence number))。
2. 表空间包括example表空间:示例表空间用于存放示例数据库的方案对象信息以及培训资料。
system表空间:系统表空间,用于存放oracle系统内部表和数据字典的数据,如表名,列名,用户名。
该表空间不能被删除。
sysaux表空间:辅助系统表空间。
temp表空间:临时表空间。
undotbls1表空间:重做表空间,存放数据库中有关重做的相关信息和数据,当用户对数据库表进行修改(包括insert,update,delete操作)时,Oracle系统自动使用重做表空间来临时存放修改前的数据。
users表空间:用户表空间,存放永久性用户对象的数据和私有信息,也被成为数据表空间。
约束条件(constraint):主键(primary key),默认(default),检查(check),唯一性(unique 允许有一个null值),外键(foreign key),。
3. 用户账号拥有的对象集称为用户的方案。
组织和管理数据库对象,可以创建不能注册到数据库的用户账号,可用来保存一组其他用户方案分开的数据库对象。
4.(1). 在表中添加列alter table xsb add zxf date(2). 在表中修改djsm的列的默认值alter table xsb modify(djsm default ’奖金800元’);(3). 在表中删除jxj,djsm两列alter table xsb drop column jxj; alter table xsb drop column djsm;(4). 修改kcb表的存储特征alter table kcb pctfree 20 maxtrans 200;(5). 为表添加主键alter tabl e xs_jsj add (constraint“pk_jsj”primary key(xh));添加联合主键create table cjb(xh char(6) not null,kch char(3)not null,cj number(2) null,primary key (xh,kch) )tablespace system;(6). 改表名alter table xsb rename to xsb1(7). 改变数据类型alter table score modifg vachar(10)(8). 复制表结构create table stu as select *from student where 1=2;(9). 复制表数据insert into stu select *from student5. 同义词的作用:为了给不同用户使用数据库对象时提供一个简单的、唯一标志数据库对象的名称,可以为数据库对象创建同义词,可通过同义词访问其他数据库。
分为私有与公用同义词。
6. 同义词还可以指向的对象有:表、视图、存储过程、函数、包和序列、索引、触发器。
7. LIKE谓词用于指出一个字符串是否与特定的字符串相匹配。
变量有名称及数据类型两个属性。
%用来表示属性提示符。
字符串的连接:||双竖线。
8 数据完整性的分类:域完整性(列完整性):指定一个数据集对某一个列是否有效和确定是否允许空值。
实体完整性(行完整性):要求表中的每一行有一个唯一的标识符,这个标识符额就是主关键字,通过索引,unique约束,primary key 约束可实现数据的实体完整性。
数据量大的情况下有索引,有外键就有索引。
参照完整性(引用完整性):保证主表中的数据与从表(被参照表)中数据的一致性。
9. %rowtype属性提供了表示一个表中一行的记录类型。
%type属性提供了变量和数据库列的数据类型(优点:不必知道xh列的确切的数据类型;如果改变xh的数据库定义,my_xh的数据类型在运行时回进行自动修改)10. PL/SQL语言:数据定义语言(如create),数据操控语言(如insert,update,select),数据控制语言(如drop)。
PL/SQL提供了三种不同的集合类型:联合数组、嵌套表、可变数组。
for-in-loop—end循环语法格式:for count in count_1..count_n loop run_expression end loop11. PL/SQL是一种块结构的语言,组成PL/SQL的单元是逻辑块,一个PL/SQL 程序块可以划分为三个部分:声明部分、执行部分和异常处理部分。
声明部分---declare执行部分----begin异常处理部分--------exception结束-----end12. 计数器的步长为 1 不能改变13. 显示游标首先要声明(declare cursor….is),在使用前要打开(open),读取数据(fetch),使用完毕要关闭(close)。
14. 触发器包括:DML触发器(类型:insert、update、delete)、替代触发器(用于不可更新视图)、系统触发器。
大对象数据不能用insert直接插入。
15. 使用for each row 表示行级触发器,如果未使用for each row则表示语句级触发器。
16. 对系统授权grant如grant create session to st6回收权限revoke如revoke crate any view from author17. 序列:升序序列值自初始值向最大值递增,默认为升序。
降序序列值自初始值向最小值递减。
SQL命令语句:increment by (递增或递减),start with(序列的初始值),maxvalue(可允许的最大值),minvalue(可允许的最小值),cycle(是否循环),cache(数据库分配存储值得数目)。
例题:P69页:利用create table命令为xscj数据库建立kcb,指定表的存储参数。
create table kcb (kch char(3) not null primary key,Kkxq number(1) null, Xf number(2) not null)Pctfree 10 pctused 40 initrans 1 maxtrans 255 storage(initial 64k minextentents 1 pctincrease40 freelists 1 freelist groups 1);P76页:用如下insert语句向xsb表中插入数据Insert into xsb select xh,xm,zy from xsb where zy=’计算机’;P129页:修改xscj数据库的books表,增加批发字段trade_price的check约束alter table books add (constraint ch_price check (trade_price<=250));P130页:删除check约束alter table table_name drop constraint check_nameP132页:在xscj数据库创建表xsb3,对学号段创建主键约束,对身份证号字段定义唯一约束Create table XSB3( xh char(6) not null, sfzh char(20) not null, Cssj date not null, Zy char(12));Alter table xsb3 add(primary key(xh)); Alter table xsb3 add(constraint UN_xs unique(sfzh));P135页:kcb为主表,kc.kch定义为主键。
Cjb为从表,请将cjb.kch定义外键。
Alte table cjb add constraint fk_kc foreign key(kch) references kcb(kch);P148页:定义一个简单的对象类型,并使用该对象类型。
首先创建对象类型test_obj:Create or replace type test_obj as object( item_id char(6), price number (10,2));创建一个表sell ,其中一列的数据类型使用对象类型test_obj。
Create teble sell(name number(2) not null primary key, info test_obj );使用如下语句向表中插入记录:insert into sell (name,info) values(1, test_obj(‘002’,23.5));P169页:游标打开后,就可以使用fetch语句从中读取数据。
Fetch语句的格式为:Declare v_xh char(6); v_zxf number(2); Cursor xs_cur3 Is Select xh.zxf from xsbWhere zy=’计算机’; Begin Open xs_cur3; Fetch xs_cus3 into v_xh,v_zxf; Where xs_cur3%found Loop Dbms_output.put_line(v_xh,v_zxf); Fetch xs_cur3 into v_xh,v_zxf;end loop; Close xs_cur3; End;P166页:【例6.27】创建一个统计数据库中不同性别人数的函数(结合例7.6)。
create or replace function count_num( in_sex in char)Return number As out_num number; BeginIf in_sex=’男’ then Select count(xb) into out_num From xsb Where xb=’女’; End if; Return(out_num); End count_num;P192页【例7.6】统计表xsb中男女同学的人数。