《数据库系统原理》实验报告 下载本文

VALUES(100000,NULL,20,2000);

(6)删除视图(RESTRICT/CASCADE)

创建顾客订购零件明细视图V_CustOrd,要求列出顾客编号、姓名、购买零件数、金额,然后在该视图的基础上,在创建(2)的视图V_CustAvgOrder,然后使用RESTRICT选项和CASCADE选项删除视图V_CustOrd。

CREATE VIEW V_CustOrd(custkey,cname,qty,extprice) AS

SELECT C.custkey,C.name,L.quantity,L.extendedprice FROM Customer C,Order O,Lineitem L

WHERE C.custkey=O.custkey AND O.orderkey=L.orderkey;

CREATE VIEW V_CustAvgOrder(custkey,cname,avgqty,avgprice) AS

SELECT custkey,MAX(cname),AVG(qty),AVG(extprice)

FROM V_CustOrd /*在视图V_CustOrd上再创建视图*/ GROUP BY custkey;

DROP VIEW V_CustOrd RESTRICT;

DROP VIEW V_CustOrd CASCADE; 6、 索引

(1)创建唯一索引

在零件表的零件名称字段上创建唯一索引。

CREATE UNIQUE INDEX Idx_part_name ON Part(name);

(2)创建函数索引(对某个属性的函数创建索引,称为函数索引) 在零件表的零件名称字段上创建一个零件名称长度的函数索引。 CREATE INDEX Idx_part_name_fun ON Part(LENGTH(name));

(3)创建复合索引(对两个及两个以上的属性创建索引,称为复合索引) 在零件表的制造商和品牌两个字段上创建一个复合索引。

CREATE UNIQUE INDEX Idx_part_mfgr_brand ON Part(mfgr,brand); (4)*创建聚簇索引

在零件表的制造商字段上创建一个聚簇索引。

CREATE UNIQUE INDEX Idx_part_mfgr ON Part(mfgr); CLUSTER Idx_part_mfgr ON Part; (5)创建Hash索引

零件表的名称字段上创建一个Hash索引。

CREATE INDEX Idx_part_name_hash ON Part USING HASH(name); (6)修改索引名称

修改零件表的名称字段上的索引名。

ALTER INDEX Idx_part_name_hash RENAME TO Idx_part_name_hash_new; (7)分析某个SQL查询语句执行时是否使用了索引 EXPLAIN SELECT * FROM part WHERE name='零件'; (8)*验证索引效率

创建一个函数TestIndex,自动计算sql查询执行的时间。

CREATE FUNCTION TestIndex(p_part_name CHAR(55)) RETURN INTEGER AS /*自定义函数TestIndex():输入参数为零件名称,返回SQL查询的执行时间*/ DECLARE

begintime TIMESTAMP; endtime TIMESTAMP; durationtime INTEGER; BEGN

SELECT CLOCK_TIMESTAMP() INTO begintime; /*记录查询执行的开始时间*/

PERFORM *FROM Part WHERE name=p_partname; /*执行SQL查询,不保存查询结果*/

SELECT CLOCK_TIMESTAMP() INTO endtime;

SELECT DATEDIFF(‘ms’,begintime,endtime) INTO durationtime;

RETURN durationtime; /*计算并返回查询执行时间,时间单位为毫秒ms*/ END;

/*查看当零件表Part数据模型比较小,并且无索引时的执行时间*/ SELECT TestIndex(‘零件名称’); INSERT INTO Part /*不断倍增零件表的数据,直到50万条记录*/ SELECT partkey+(SELECT COUNT(*) FROM Part),

Name,mfgr,brand,type,size,container,retailprice,comment FRPM Part;

/*查看当零件表Part数据模型比较大,但无索引时的执行时间*/ SELECT TestIndex(‘零件名称’);

CREATE INDEX part_name ON Part(name); /*在零件表的零件名称字段上创建索引*/

/*查看零件表Part数据规模比较大,有索引时的执行时间*/ SELECT TestIndex();

四、实验心得

通过本次实验,我知道只有正确理解数据库模式结构,才能正确设计数据库查询。连接查询是数据库sql查询中最重要的查询,连接查询的设计要特别注意,不同的查询表达,其查询执行的性能会有很大差别。正确地设计和执行数据更新语句,确保正确地录入数据和更新数据,才能保证查询的数据正确。当数据更新失败时,一个主要原因是更新数据时违反了完整性约束。

实验项目名称:安全性语言实验 实验学时: 2 同组学生姓名: 孟陈、陈晓雪、季佰军 实验地点: 1318 实验日期: 5.26 实验成绩: 批改教师: 批改时间:

一、 实验目的

1、 掌握自主存取控制缺陷的定义和维护方法。 2、 掌握数据库审计的设置和管理方法,以便监控数据库操作,维护数据库安全。

二、 实验内容和要求

1、 定义用户、角色,分配权限给用户、角色,回收权限,以相应的用户名登录数据库验证权限分配是否正确。选择一个应用场景,使用自主存取控制机制设置权限分配。可以采用两种方案。

方案一:采用SYSTEM超级用户登录数据库,完成所有权限分配工作,然后用相应用户名登录数据库已验证权限分配正确性;

方案二:采用SYSTEM用户登录数据库创建3个部门经理用户,并分配相应的权限,然后分别用3个经理用户名登录数据库,创建相应部门的USER、ROLE,并分配相应权限。

2、打开数据库审计开关。以具有审计权限的用户登录数据库,设置审计权限,然后以普通用户登录数据库,执行相应的数据操纵sql语句,验证相应审计设置是否生效,最后在一具有审计权限的用户登录数据库,查看是否存在相应的审计信息。

三、实验过程

1、自主存取控制实验 (1)创建用户

1 为采购、销售和客户管理等3个部门的经理创建用户标识,要求具有创建用○

户或角色的权利。

CREATE USER David WITH CREATEROLE PASSWORD '123456'; CREATE USER Tom WITH CREATEROLE PASSWORD '123456'; CREATE USER Kathy WITH CREATEROLE PASSWORD '123456';

2为采购、销售和客户管理等3个部门的职员创建用户标识和用户口令。 ○

CREATE USER Jeffery WITH PASSWORD '123456'; CREATE USER Jane WITH PASSWORD '123456'; CREATE USER Mike WITH PASSWORD '123456'; (2)创建角色并分配权限

1为各个部门分别创建一个查询角色,并分配相应的查询权限。 ○