oracle事务和数据库对象.ppt_第1页
oracle事务和数据库对象.ppt_第2页
oracle事务和数据库对象.ppt_第3页
oracle事务和数据库对象.ppt_第4页
oracle事务和数据库对象.ppt_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章,事务和数据库对象,回顾,SQL 支持的操作符包括算术、比较、逻辑、集合和连接操作符 SQL 函数可大致分为: 单行函数:日期、字符、数字、转换、其他 聚合函数 分析函数,目标,事务 使用同义词 使用序列 理解并使用视图 理解并使用索引,事务管理,例如,银行转帐问题: 假定资金从帐户A转到帐户B,至少需要两步: 帐户A的资金减少 然后帐户B的资金相应增加,银行转帐,帐户A,帐户B,事务管理,假定张三的帐户直接转帐1000元到李四的帐户,CREATE TABLE bank ( customerName CHAR(10), -顾客姓名 currentMoney MONEY -当前余额 ) GO ALTER TABLE bank ADD CONSTRAINT CK_currentMoney CHECK(currentMoney=1) GO INSERT INTO bank(customerName,currentMoney) VALUES(张三,1000) INSERT INTO bank(customerName,currentMoney) VALUES(李四,1),创建帐户表,存放用户的帐户信息,添加约束:根据银行规定,帐户余额不能少于1元,否则视为销户,张三开户,开户金额为1000元 ;李四开户,开户金额1元,事务控制,事务是最小的工作单元,作为一个整体进行工作 事务的原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 保证事务的整体成功或失败,称为事务控制 用于事务控制的语句有: COMMIT - 提交并结束事务处理 ROLLBACK - 撤销事务中已完成的工作 SAVEPOINT 标记事务中可以回滚的点,数据库对象简介,Oracle 数据库对象又称模式对象 数据库对象是逻辑结构的集合,最基本的数据库对象是表 其他数据库对象包括:,数据库对象,同义词,序列,视图,索引,同义词 3-1,同义词是现有对象的一个别名。 简化SQL语句 隐藏对象的名称和所有者 提供对对象的公共访问 同义词共有两种类型:,同义词,私有同义词,公有同义词,私有同义词只能在其模式内访问,且不能与当前模式的对象同名。,公有同义词可被所有的数据库用户访问。,同义词 3-2,CREATE SYNONYM emp FOR SCOTT.emp;,SCOTT.emp 的别名,模式名,表名,私有同义词,公有同义词,CREATE PUBLIC SYNONYM syn_emp FOR SCOTT.emp;,同义词名称,同义词 3-3,创建或替换现有的同义词,CREATE OR REPLACE SYNONYM syn_emp FOR SCOTT.emp;,替换现有的同义词,SQL DROP SYNONYM emp;,SQL DROP PUBLIC SYNONYM syn_emp;,删除同义词,序列,序列是用于生成唯一、连续序号的对象 序列可以是升序的,也可以是降序的 使用CREATE SEQUENCE语句创建序列,SQL CREATE SEQUENCE seq_toys START WITH 10 INCREMENT BY 10 MAXVALUE 2000 MINVALUE 10 NOCYCLE CACHE 10;,指定第一个序号从 10 开始,指定序号之间的间隔为 10,表示序列的最大值为 2000,表示序列的最小值为 10,在达到最大值后停止生成下一个值,指定内存中预先分配的序号数,访问序列,通过序列的伪列来访问序列的值 NEXTVAL 返回序列的下一个值 CURRVAL 返回序列的当前值,SQL INSERT INTO toys (toyid, toyname, toyprice) VALUES (seq_toys.NEXTVAL, TransFormer, 500); SQL INSERT INTO toys VALUES ( toys_seq.NEXTVAL, Plane, 75);,指定序列的下一个值,SQL SELECT seq_toys.CURRVAL FROM dual;,检索序列的当前值,更改和删除序列,SQL ALTER SEQUENCE seq_toys MAXVALUE 5000 CYCLE;,使用ALTER SEQUENCE语句修改序列, 不能更改序列的START WITH参数,使用DROP SEQUENCE语句删除序列,SQL DROP SEQUENCE seq_toys;,视图,视图以经过定制的方式显示来自一个或多个表的数据 视图可以视为“虚拟表”或“存储的查询” 创建视图所依据的表称为“基表” 视图的优点有: 提供了另外一种级别的表安全性 隐藏的数据的复杂性 简化的用户的SQL命令 隔离基表结构的改变 通过重命名列,从另一个角度提供数据,创建视图 3-1,stud_details,stud_view,创建视图,CREATE VIEW stud_view AS SELECT studno, studname, subno FROM stud_details;,创建视图 3-2,创建视图的语法:,CREATE OR REPLACE FORCE VIEW view_name (alias, alias.) AS select_statement WITH CHECK OPTION WITH READ ONLY;,创建视图 3-3,使用 WITH CHECK OPTION 选项创建视图,CREATE OR REPLACE VIEW v_stu AS SELECT * FROM t_student WHERE f_class = 1 WITH CHECK OPTION CONSTRAINT chk_class1;,使用 ORDER BY 子句创建视图,CREATE OR REPLACE VIEW v_stusorted AS SELECT * FROM t_student ORDER BY f_class;,创建带有错误的视图,CREATE FORCE VIEW v_temp AS SELECT * FROM t_temp;,联接视图 2-1,stud_details,sub_details,CREATE VIEW v_stud AS SELECT studno, studname, studmarks, subname FROM stud_details, sub_details WHERE stud_details.subno=sub_details.subno;,v_stud,联接视图,联接视图 2-2,创建外联接视图,CREATE VIEW v_coursecount AS SELECT stu.f_id, f_name, count(f_courseid) as coursecount FROM t_student stu, t_grade gra WHERE stu.f_id = gra.f_stuid(+) GROUP BY stu.f_id;,SELECT stu.f_id, f_name, count(f_courseid) as coursecount FROM t_student stu left join t_grade gra on (stu.f_id = gra.f_stuid) GROUP BY stu.f_id, f_name;,视图上的DML语句,在视图上也可以使用修改数据的DML语句,如INSERT、UPDATE和DELETE 视图上的DML语句有如下限制: 只能修改一个底层的基表 如果修改违反了基表的约束条件,则无法更新视图 如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或 GROUP BY 子句,则将无法更新视图 如果视图包含伪列或表达式,则将无法更新视图,键保留表,stud_details,sub_details,键保留表,因为 studno 既是 stud_details 中的主键, 也是联接结果中的主键,stud_details 为什么 是键保留表?,联接视图,视图中的函数,视图中可以使用单行函数、分组函数和表达式 使用DROP VIEW语句删除视图,CREATE VIEW item_view AS SELECT itemcode, LOWER(itemdesc) item_desc FROM itemfile;,SQL DROP VIEW toys_view;,索引 3-1,索引是与表相关的一个可选结构 用以提高 SQL 语句执行的性能 减少磁盘I/O 使用 CREATE INDEX 语句创建索引 在逻辑上和物理上都独立于表的数据 Oracle 自动维护索引,索引 3-2,索引有各种类型,除了标准索引外,还有一些特殊类型的索引:,索引的类型,基于函数的索引,反向键索引,位图索引,唯一索引,组合索引,索引 3-3,SQL CREATE INDEX x_name ON t_student (f_name) TABLESPACE index_tbs;,创建标准索引,重建索引,SQL ALTER INDEX x_name REBUILD;,删除索引,SQL DROP INDEX x_name;,唯一索引,唯一索引确保在定义索引的列中没有重复值 Oracle 自动在表的主键列上创建唯一索引 使用CREATE UNIQUE INDEX语句创建唯一索引,SQL CREATE UNIQUE INDEX x_id ON itemfile (f_id);,组合索引,组合索引是在表的多个列上创建的索引 索引中列的顺序是任意的 如果 SQL 语句的 WHERE 子句中引用了组合索引的所有列或大多数列,则可以提高检索速度,SQL CREATE INDEX x_comp ON t_student(f_name, f_birth);,反向键索引,反向键索引反转索引列键值的每个字节 通常建立在值是连续增长的列上,使数据均匀地分布在整个索引上 创建索引时使用REVERSE关键字,SQL CREATE INDEX rev_index ON t_student (f_birth) REVERSE;,SQL ALTER INDEX rev_index REBUID NOREVERSE;,位图索引,位图索引适合创建在低基数列上 位图索引不直接存储ROWID,而是存储字节位到ROWID的映射 减少响应时间 节省空间占用,SQL CREATE BITMAP INDEX bit_index ON t_student (f_sex);,基于函数的索引,基于一个或多个列上的函数或表达式创建的索引 表达式中不能出现聚合函数 不能在LOB类型的列上创建 创建时必须具有 QUERY REWRITE 权限,SQL CREATE INDEX x_lowercase ON toys (LOWER(toyname);,SQL SELECT toyid FROM toys WHERE LOWER(toyname)=doll;,获取索引的信息,与索引有关的数据字典视图有: USER_INDEXES 用户创建的索引的信息 USER_IND_PARTITIONS 用户创建的分区索引的信息 USE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论