第一篇:数据库实验答案
实验四
五、实验方法和步骤:
1.向数据库的USERS表空间添加一个大小为10M的数据文件userdata02.dbf。
Alter tablespace users add datafile ‘c:oracleoradataorcluserdata02.dbf’ size 10M;2.向数据库的TEMP表空间添加一个大小为5N的临时数据文件temp02.dbf。
Alter tablespace temp add tempfile’c:oracleoradataorcltemp02.dbf’ size 5M;3.修改userdata02.dbf为自动增长方式,每次增长512k,没有限制大小。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ autoextend on next 512k maxsize unlimited;
4.取消userdata02.dbf的自动增长方式。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ autoextend off;5.将userdata02.dbf大小设置为8MB。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ resize 8M;6.将userdata02.dbf设置为脱机。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ offline;7.将userdata02设置为联机。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ online;8.改变userdata02的名称。
(1)alter tablespace users offline;
(2)将userdata02.dbf重命名为userdata002.dbf;(3)alter tablesace users rename datafile ‘c:oracleoradataorcluserdata02.dbf’,‘c:oracleoradataorcluserdata002.dbf’;(4)alter tablespace users online;
9.查询数据文件信息(包括数据文件动态信息;数据文件详细信息;临时数据文件信息)。(1)select name,file#,status,checkpoint_change# from V$DATAFILE;
(2)select tablespace_name,bytes,autoextensible,file_name from DBA_DATA_FILES;(3)select tablespace_name,file_name,autoextensible from DBA_TEMP_FILES;
实验五 表空间、段、区、块的管理
五、实验方法和步骤:
1.编辑一个脚本文件TEST,脚本文件内容为创建一个永久性的Student表空间,区自动扩展,段采用手动管理方式,并执行脚本文件。
Create tablespace student datafile ‘c:oracleoradataora404orcltbs1_1.dbf’ 2.为数据库的student表空间添加一个大小为10MB的新的数据文件。
Alter tablespace student add datafile ‘c:oracleoradataora404orcltbs1_2.dbf’ size 10M 3.创建一个临时表空间mytemp,并为临时表空间添加一个大小为10MB的临时数据文件。
Create temporary tablespace mytemp tempfile ‘c:oracleoradataora404orcltemp1_1.dbf’ size 20M extent management local uniform size 16M;
Alter tablespace mytemp add tempfile c:oracleoradataora404orltemp1_2.dbf’ size 10M 4.将student表空间新添加的数据文件的大小改为20MB。
Alter database datafile c:oracleoradataora404orcltbs1_2.dbf’ resize 20M 5.将studnet表空间设置为offline;再设置为online。Alter tablespace student offline;Alter tablespace student online;6.将student表空间设置为只读状态。Alter tablespace student read only;7.为student表空间创建一个回退段。
Create rollback segment student_roll tablespace student;8.删除student表空间及其所有内容。
Drop tablespace student including contents;9.查询表空间基本信息。
Select tablespace_name, extent_management,a llocation_type, contents from DBA_TABLESPACE;10.查询表空间数据文件信息。
Select file_name, blocks, tablespace_name from DBA_DATA_FILES;11.统计表空间空闲空间信息。
SELECT TABLESAPCE_NAME “TABLESPACE”, FILE_ID, COUNT(*)“PIECES”, MAX(BLOCKS)“MAXIMUM”, MIN(BLOCKS)“MINIMUM”, AVG(BLOCKS)“AVERAGE”, SUM(BLOCKS)“TOTAL” FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME, FILE_ID;
12.查询表空间空闲空间大小。
SELECT TABLESPACE_NAME, SUM(BYTES)FREE_SPACES FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME;
13.查询scott用户emp表的某个员工元组的物理地址(ROWID)。SELECT ROWID, EMPNO FROM SCOTT.EMP WHERE EMPNO=7369;
实验六 模式对象管理—基础表
五、实验方法和步骤:
1、创建一个表
目标:创建一个名为STUDENT的表,该表有ID(学号)、NAME(姓名)、SEX(性别)、COURSE(课程)、SCORE(成绩)字段,并保存在USER01表空间。
(1)在SQL*PLUS中执行使用CREATE TABLE语句在某一表空间中创建STUDENTS表,并通过INSERT、SELECT、UPDATE、DELETE语句对表进行操作,各举一例。(2)通过OEM控制台新的表,并查看新表情况。Create table student(Id number primary key, Name varchar2(20), Sex char(1),Course varchar2(20), Score number(5,2))tablespace users
Insert into student(id)values(1);Select id from student;
Update student set id=2 where id=1;Delete from student where id=2;
2、创建一个临时表
目标:创建一个名为TEMP01的事务级别临时表,该表有ID(学号)、NAME(姓名)字段,并保存在temp表空间中。
Create global temporary table temp01(id number(2)primary key, name varchar(20))on commit delete rows;
3、修改表
目标:修改STUDENTS表的存储参数;为表分配新的存储空间;添加一个新的列;设置列为无用状态(UNUSED)。
(1)在SQL*PLUS中执行ALTER TABLE语句修改STUDENTS表的存储参数(修改pctfree和pctused分别为20和40)。
Alter table student pctfree 20;Alter table student ptused 40;
(2)在SQL*PLUS中执行ALTER TABLE语句在STUDENTS表分配大小为400KB的新区。Alter table student allocate extent(size 400k);
(3)在SQL*PLUS中执行ALTER TABLE语句在STUDENTS表新增加一个AGE列,列的类型为NUMBER(2)。Alter table student add(age number(2));
(4)在SQL*PLUS中执行ALTER TABLE语句在将STUDENTS表中的AGE设置为无用状态。Alter table student set unused(age);
4、截断表
目标:删除表STUDENTS中的所有记录。
(1)在SQL*PLUS中执行TRUNCATE TABLE语句删除STUDENTS表中的所有记录。Truncate table student;
(2)在SQL*PLUS中执行SELECT语句查看STUDENTS表中的内容。Select * from student;
5、查询ORACLE数据库的模式对象信息
目标:使用管理工具(SQL*PLUS或OEM)获得有关数据库模式对象的有关信息。
(1)用SCOTT帐户登录SQL*PLUS,显示用户,并通过用户视图USER_TABLES、USER_VIEWS、USER_INDEXS、USER_OBJECTS、USER_TRIGGERS、USER_SEQUENCES等模式对象信息。Show user
Select table_name from user_tables;Select view_name from user_views;Select index_name from user_indexes;Select object_name from user_objects;Select trigger_name from user_triggers;Select sequence_name from user_sequence;
(2)使用SCOTT帐户登录数据库,在OME控制台中查看SCOTT用户的各种模式对象信息。
6、给表student表的nane列添加一个唯一值约束,并删除该约束 Alter table student add constraint p_uk unique(name);Alter table student drop drop constraint p_uk;
实验七 模式对象管理—视图
五、实验方法和步骤:
1、创建基础表BOOKS,包含BOOK_ID,数字型,BOOK_NAME,可变长50位,AUTHOR,可变长20位,PRESS可变长50位,Price数字型,PUBLISH_DATE,日期型;并插入10条数据。Create table books(Book_id number primary key, Book_name varchar2(50)not null, Author varchar2(20), Press varchar2(50), Price number, Publishdate date);
2、关系视图
(1)建立关系视图V_BOOKS,包含书名、作者、出版社。Create view v_books as
Select book_id 编号,author 作者,press 出版社
from books;(2)查看视图定义。
Select text from user_views where view_name=’VW_BOOKS’;(3)查看视图内容。
Select * from vw_books;
(4)修改视图,增加一个列出版日期。
Create or replace view VW_BOOKS As
select book_id 编号,author 作者,press 出版社,publishdate 出版日期
from books;(5)向基础表增加一个属性列“价格”,数字型。查看视图的可用性状态。
alter table boks add price int;
Select object_name,status from user_objects where object_name=’VW_BOOKS’ and object_type=’VIEW’;
(6)重新编译V_BOOKS视图。再查看视图的可用性状态
alter view vw_books compile
Select object_name,status from user_objects where object_name=’VW_BOOKS’ and object_type=’VIEW’;(7)删除该视图。
drop view vw_books;
3、内嵌视图
(1)查询价格由高到低处于前三位的书本信息,注意采用内嵌视图的方式实现。
select * from
(select book_id,book_name ,price from books
order by price desc)where rownum<=3;
(2)利用内嵌视图将所有书籍的价格增加10元。
update(select price from books)set price=price+10
实验十 PL/SQL程序结构
五、实验方法和步骤:
1.在SQL*Plus中使用PL/SQL块处理EMP表中职工号7788的职工,如果工资小于5000那么把工资更改为5000。
(1)首先采用SCOTT用户登录;(2)查询7788员工的工资是多少;
(3)定义声明块和执行块,修改该员工工资;(4)再查询该员工工资是多少; SQL>DECLARE
X NUMBER(7,2);BEGIN
SELECT sal INTO x FROM emp WHERE empno = 7788;
IF x < 5000
THEN UPDATE emp SET sal = 5000 WHERE empno = 7788;END IF;END;
2.利用三种循环控制结构向表中插入150条记录。(1)创建一张表,用来记录循环指针的值;
Create table temp_table(num_col number, info_col char(10));(2)利用LOOP循环向表中插入前50条记录; DECLARE
v_counter BINARY_INTEGER :=1;BEGIN
LOOP
INSERT INTO temp_table values(v_counter,’loop index’);
v_counter := v_counter+1;
EXIT WHEN v_counter>50;
END LOOP;END;
(3)利用WHILE循环向表中插入51-100条记录; DECLARE
v_counter BINARY_INTEGER :=1;BEGIN
WHILE v_counter<100 LOOP
INSERT INTO temp_table values(v_counter,’loop index’);
v_counter := v_counter+1;
END LOOP;END;
(4)利用FOR循环向表中插入101-150条记录; DECLARE
v_counter BINARY_INTEGER :=1;BEGIN FOR v_counter IN 101..150 LOOP
INSERT INTO temp_table values(v_counter,’loop index’);
END LOOP;END;
(5)查看表中的信息。
SLELECT * FROM TEMP_TABL
实验十一 游标
五、实验方法和步骤:
1.声明显式游标
声明一个游标用来读取基表EMP中部门号是20且工作为分析员的职工: DECLARE Cursor c1 IS
SELECT ename, sal, hiredate FROM emp WHERE deptno = 20 AND job = 'ANALYST';v_ename VARCHAR2(10);v_sal NUMBER(7,2);v_hiredate date;begin OPEN c1;
FETCH c1 INTO v_ename, v_sal, v_hiredate;CLOSE c1;end;
2.游标的应用
(1)利用游标修改数据,如果EMP中部门号是20,工作为分析员的职工工资小于5000,更改为5000: DECLARE CURSOR c1 IS
SELECT empno, sal, hiredate, rowid
FROM emp WHERE deptno = 20 AND job = 'ANALYST' FOR UPDATE OF sal;emp_record c1%ROWTYPE;BEGIN OPEN c1;LOOP
FETCH c1 INTO emp_record;EXIT WHEN c1%NOTFOUND;IF emp_record.sal <5000 THEN
UPDATE emp set sal = 5000 where empno = emp_record.empno;END IF;END LOOP;CLOSE c1;END;
(2)利用游标,如果部门是SALES,地址不是DALLAS的,地址更改为DALLAS;如果部门不是SALES,地址不是NEW YORK的,地址更改为NEW YORK: DECLARE CURSOR c1 IS SELECT dname, loc FROM dept FOR UPDATE OF loc;Dept_rec c1%ROWTYPE;BEGIN OPEN c1;LOOP
FETCH c1 INTO dept_rec;EXIT WHEN c1%NOTFOUND;
IF dept_rec.dname = 'SALES' AND dept_rec.loc!= 'DALLAS'
THEN UPDATE dept SET LOC = 'DALLAS' WHERE CURRENT OF C1;ELSE IF DEPT_REC.DNAME!= 'SALES' AND DEPT_REC.LOC!= 'NEW YORK' THEN UPDATE dept SET LOC = 'NEW YORK' WHERE CURRENT OF C1;END IF;END LOOP;CLOSE c1;END;
实验十二 存储过程和函数
1.编写一个存储过程,用它显示scott.dept、scott.emp表中各部门的名称、员工总
数以及员工的工资总和和平均工资。
set serverout on;
create or replace procedure outputEMP as begin declare
cursor cEMP is
select dname,count(*),avg(sal),sum(sal)
from scott.emp,scott.dept
where scott.emp.deptno=scott.dept.deptno
group by dname;
d_name varchar2(14);
count_EMP number;
sum_sal number(7,2);
avg_sal number(7,2);
begin
open cEMP;
fetch cEMP into d_name,count_EMP,avg_sal,sum_sal;
while cEMP %found loop
dbms_output.put_line(d_name||','||count_EMP||','||avg_sal||','||sum_sal);
fetch cEMP into d_name,count_EMP,avg_sal,sum_sal;
end loop;
close cEMP;
end;
end outputEMP;2.编写一个函数,用它计算0到指定数字(作为函数输入参数)之间的整数和。set sertverout on;
create or replace function get_sum(maxNUM number)return number as begin
declare sumNUM number;
i number;
begin
sumNUM:=0;
i:=maxNum;
while i>0 loop
sumNUM:=sumNUM+i;
i:=i-1;
end loop;
return sumNUM;
end;end get_sum;
实验十三 触发器
1.编写一个触发器,用它把数据库系统的关闭事件记录到一个表(表结构自己设计)内。Create table shutdown_log(shut_user varchar2(20),shut_time date,shut_action varchar2(20));
create or replace trigger shutdown_record before shutdown on database begin
insert into shutdown_log values(user,sysdate,'关闭数据库');end;
2.编写一个行触发器,把emp表增、删、改操作前后员工的姓名和工资前后变化情况显示处理。create or replace trigger trg_emp_dml_row
Before insert or update or delete on scott.emp
For each row
Begin
If inserting then
Dbms_output.put_line(:new.empno||’ ’||:new.ename);
Elsif updating then
Dbms_output.put_line(:old.sal||’ ’||:new.sal);
Else
Dbms_output.put_line(:old.empno||’ ’||:old.ename);
End if;
End trg_emp_dml_row;
第二篇:数据库实验
实验1.1 使用SQL Server工具(Microsoft SQL Server Management Studio Express)管理数据库 实验内容:
(1)使用SSMS(SQL Server Management Studio)加入实验数据库。(2)使用SSMS可视化建立、修改和删除数据库、表。(3)使用SSMS对数据库进行备份和恢复。
(4)使用SSMS对表进行查询、插入、修改、删除。实验步骤:
(1)加入School数据库。(2)建立Test数据库。
(3)在数据库中建立人员表PERSON(P#,Pname,Page)。更改表设置P#为主键,增加属性Ptype(类型是CHAR,长度是10)。
(4)用SSMS的查询功能(新建查询)对PERSON表进行查询、插入、修改、删除等操作:首先插入两条记录;修改第二条记录;删除第二条记录。(5)备份Test数据库。(6)删除表PERSON。(7)恢复Test数据库。(8)删除Test数据库。
第三篇:数据库实验
3.实验步骤
在学生选课数据库中实现其查询操作,写出T-SQL语句(注:学生选课数据库为前三次实验课所建立的数
据库)
一、简单查询实验
(1)查询选修了课程的学生学号。
(2)查询选修课程号为0101的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按
学号升序排列。
(3)查询选修课程号为0101的成绩在80~90分之间的学生学号和成绩,并将成绩乘以系数0.8输出。
二、连接查询实验
(1)查询每个学生的情况以及他(她)所选修的课程。
(2)查询选修离散散学课程且成绩为90分以上的学生学号、姓名及成绩。
(3)查询每一门课的间接先行课(即先行课的先行课)
三、嵌套查询操作
(1)查询0101课程的成绩高于张林的学生学号和成绩。
(2)查询其他系中年龄小于计算机系年龄最大者的学生。
(3)查询同王洪敏“数据库原理”课程分数相同的学生的学号。
(4)查询选修了全部课程的学生的姓名。
(5)查询与学号为09001103的学生所选修的全部课程相同的学生学号和姓名。
(6)查询至少选修了学号为09001103的学生所选修的全部课程的学生学号和姓名。
四、组合查询和分组查询
(1)查找选修“计算机基础”课程的学生成绩比此课程的平均成绩大的学生学号、成绩。
(2)查询年龄大于女同学平均年龄的男同学姓名和年龄。
(3)列出各系学生的总人数,并按人数进行降序排列。
(5)查询选修计算机基础和离散数学的学生学号和平均成绩。
4、要求
请按题号依次作答,完成在word文档中,写明班级学号姓名,于周日之于周日之前发至xcf7@163.com,独立完成,严禁抄
第四篇:数据库与软件工程上机实验答案
《数据库与软件工程》上机实验答案
实验三 SQL语言的DDL
3.CREATE TABLE aa(Bb1 VARCHAR(30),Bb2 INT,Bb3 DECIMAL(6,2))
4. ALTER TABLE aa ADD Bb4 varchar(20)
5.DROP TABLE AA
6. CREATE VIEWReaderView(借阅者)
ASSELECT DISTINCT 读者编号
FROM 借阅
7. Drop ViewReaderView。
8.CREATE INDEX INDEX1 ON 读者(姓名 ASC,单位 ASC)
CREATE INDEX INDEX3 ON 借阅(借阅日期 DESC)
9. DROP INDEX 读者.INDEX1
CREATE INDEX INDEX1 ON 读者(姓名 ASC)
实验四 SQL语言的DML初步
1. CREATE DEFAULT ZEROVALUE AS 0
sp_bindefault ZEROVALUE, '图书.借出否'
CREATE DEFAULT CURTIME AS getdate()
sp_bindefault CURTIME, '借阅.借阅日期'
2. CREATE RULE gender_rule
AS@value in('男','女')
EXEC sp_bindrule 'gender_rule', '读者.性别'
CREATE RULE lenddate_rule
AS@value > '2004-1-1'
EXEC sp_bindrule 'lenddate_rule', '借阅.归还日期'
3. 用INSERT语句对“图书”表插入6条记录
INSERT INTO 图书(书号,类别,出版社,作者,书名,定价)
VALUES('0001','计算机类','清华出版社','严蔚敏','数据结构', 20.11)INSERT INTO 图书(书号,类别,出版社,作者,书名,定价)
VALUES('0002','计算机类','清华出版社','苗雪兰','数据库技术及应用',29.00)
INSERT INTO 图书(书号,类别,出版社,作者,书名,定价)
VALUES('0003','计算机类','清华出版社','李建中','软件工程',48.00)INSERT INTO 图书(书号,类别,出版社,作者,书名,定价)
VALUES('0004','计算机类','电子工业出版社','汤惟','WEB技术',32.00)
INSERT INTO 图书(书号,类别,出版社,作者,书名,定价)
VALUES('0005','自动化类','机械工业出版社','胡寿松','自动控制原理',52.00)
INSERT INTO 图书(书号,类别,出版社,作者,书名,定价)
VALUES('0006','自动化类','机械工业出版社','郑大钟','线性控制理论',32.00)用INSERT语句对“读者”表插入4条记录
INSERT INTO 读者(读者编号,姓名,单位,性别,电话)
VALUES('10001','张三','东华大学','男','67792312')
INSERT INTO 读者(读者编号,姓名,单位,性别,电话)
VALUES('10002','李四','东华大学','女','67792312')
INSERT INTO 读者(读者编号,姓名,单位,性别,电话)
VALUES('10003','王五','东华大学','男','67792312')
INSERT INTO 读者(读者编号,姓名,单位,性别,电话)
VALUES('10004','李明','东华大学','女','67792312')
用INSERT语句对“借阅”表插入7条记录
INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)
VALUES('0001','10001','2006-04-19 09:58:03','2006-05-19 8:38:23')
INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)
VALUES('0006','10002','2006-07-01 15:28:12','2006-07-18 9:14:02')
INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)
VALUES('0002','10002','2006-07-01 15:28:30','2006-07-17 19:10:32')
INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)
VALUES('0002','10003','2006-07-03 15:28:30','2006-08-09 15:28:30')
INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)
VALUES('0004','10002','2007-05-01 11:28:24','2007-08-01 8:09:04')
INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)
VALUES('0005','10002','2007-11-01 10:43:12','2007-12-01 14:09:56')
INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)
VALUES('0003','10004','2007-12-01 16:06:02','2007-12-29 13:17:09')
4. UPDATE 借阅
SET 借阅日期='2006-08-03 15:28:30'
WHERE 读者编号='10003' AND
借阅日期 BETWEEN '2006-07-03' AND '2006-07-04' AND 书号='0002'
5. DELETE FROM 借阅
WHERE 借阅日期<'2006-06-01'
1. SELECT 书号,书名 as 名称,定价 as 价格 FROM 图书
WHERE 类别='自动化类'
2. 方法1:
SELECT * FROM 图书
WHERE 类别='计算机类'
UNION
SELECT * FROM 图书
WHERE 出版社='电子工业出版社'
方法2:
SELECT * FROM 图书
WHERE 类别='计算机类' OR 出版社='电子工业出版社'
3. SELECT * INTO 计算机图书表 FROM 图书
WHERE 类别='计算机类'
4. SELECT DISTINCT 读者.* FROM 读者,借阅
WHERE 读者.读者编号=借阅.读者编号
5. SELECT 读者.读者编号,姓名,单位,图书.书号,书名,借阅日期
FROM 读者,借阅,图书
WHERE 读者.读者编号=借阅.读者编号 AND 图书.书号=借阅.书号
6. SELECT 图书.书号,书名,类别,借阅日期 FROM 读者,借阅,图书
WHERE 读者.读者编号=借阅.读者编号 AND 图书.书号=借阅.书号
AND 姓名='张三'
ORDER BY 借阅日期 DESC
7. SELECT 读者.读者编号,姓名,书名,DATEDIFF(day,借阅日期,归还日期)as 借阅时间
FROM 读者,借阅,图书
WHERE 读者.读者编号=借阅.读者编号 AND 图书.书号=借阅.书号
AND DATEDIFF(day,借阅日期,归还日期)>20
order by 借阅时间
8. SELECT * FROM 读者
WHERE NOT EXISTS(SELECT * FROM 图书
WHERE 类别='自动化类' and NOT EXISTS(SELECT * FROM 借阅
WHERE 读者编号=读者.读者编号 and 书号=图书.书号))
1. SELECT 类别,COUNT(*)AS 数量, AVG(定价)AS平均价格,SUM(定价)AS 总价
FROM 图书
GROUP BY 类别
ORDER BY 类别
2. SELECT YEAR(借阅日期)as 年份,书号,COUNT(*)AS 借阅次数
FROM 借阅
GROUP BY YEAR(借阅日期),书号
ORDER BY 借阅次数 DESC
3. SELECT 读者.读者编号,COUNT(书号)AS 借阅次数 FROM 读者
LEFT JOIN
(SELECT * FROM 借阅 WHERE 借阅日期 BETWEEN '2006-7-1' AND '2007-10-1')A
ON 读者.读者编号=A.读者编号
GROUP BY 读者.读者编号
4. SELECT 读者编号,COUNT(*)AS 次数 FROM 借阅,图书
WHERE 借阅.书号=图书.书号 AND 书名='数据库技术及应用'
GROUP BY 读者编号
ORDER BY 次数 DESC
5. 方法1:
SELECT MAX(次数)AS 最多,MIN(次数)AS 最少,AVG(次数*1.0)AS平均
FROM(SELECT 图书.书号,COUNT(*)AS 次数 FROM 图书,借阅
WHERE 图书.书号=借阅.书号 AND 类别='计算机类'
GROUP BY 图书.书号)A
方法2:
SELECT 图书.书号,COUNT(*)*1.0 AS 次数 FROM 图书,借阅
WHERE 图书.书号=借阅.书号 AND 类别='计算机类'
GROUP BY 图书.书号
COMPUTE MAX(COUNT(*)*1.0),MIN(COUNT(*)*1.0),AVG(COUNT(*)*1.0)
6. SELECT 类别 FROM 图书
GROUP BY 类别
HAVING MAX(定价)>=ALL(SELECT 2*AVG(定价)FROM 图书 GROUP BY 类别)
7. SELECT 书号,书名,定价,出版社 FROM 图书
WHERE 类别='计算机类'
ORDER BY 出版社 DESC
COMPUTE COUNT(书号)BY 出版社
COMPUTE COUNT(书号)
实验七 存储过程、触发器和数据库恢复
1.(1)
CREATE PROCEDURE 借阅情况
@Readerno VARCHAR(8)
AS
SELECT 读者.读者编号,姓名,图书.书号,书名,借阅日期, 借出否 AS 归还否FROM 读者,借阅,图书
WHERE 读者.读者编号=借阅.读者编号 AND 图书.书号=借阅.书号AND 读者.读者编号=@Readerno
EXEC 借阅情况 ‘10004’
(2)
CREATE PROCEDURE 借出情况
@Bookno VARCHAR(10)
AS
SELECT 书名,姓名,借阅日期,归还日期
FROM 读者,借阅,图书
WHERE 读者.读者编号=借阅.读者编号 AND 图书.书号=借阅.书号AND 图书.书号=@Bookno
EXEC 借出情况 '0004'
2.CREATE TRIGGER lendbookinsert ON 借阅
FOR INSERT
AS
IF(SELECT 借出否 FROM 图书 WHERE 书号 IN
(SELECT 书号 FROM INSERTED))=1
BEGIN
PRINT '该书已经借出'
ROLLBACK TRANSACTION
END
ELSE
BEGIN
UPDATE 图书
SET 借出否=1
WHERE 书号 IN(SELECT 书号 FROM INSERTED)
END
第五篇:数据库第三次实验
南昌航空大学实验报告
2018年5月30日
课程名称:
数据库原理
实验名称: 数据库安全性 学号: 16206127 指导教师评定:
姓名: 周良 签名:
一,实验目的
1熟悉不同数据库中的保护措施——安全性控制,重点实践○
SQL SEVER的安全性机制,掌握SQL Sever中有关用户、角色及操作权限等的管理方法。
二,实验内容
1,SQL Server的安全模式
(1)利用T-SQL添加SQL Sever账号。
(2)利用T-SQL修改SQL Sever登陆账号属性。
(3)利用T-SQL删除SQL Sever登陆账号。
2,管理数据库用户
(1)利用T-SQL添加SQL Sever用户。
(2)利用T-SQL删除SQL Sever用户。
3,管理数据库角色
(1)利用T-SQL删除用户自定义角色,可以使用系统存储过程sp_droprole删除用户自定义角色。
4,权限管理
(1)利用T-SQL管理权限
1语句授权。○2对象授权。○3收回授权。○三,实验步骤
exec sp_addlogin 'qh','qh','jxgl','english'
四,exec sp_password 'qh','qhqxzsly','qh' 五,六,alter login qh with password='123456' 七,八,exec sp_droplogin qh 九,十,drop login qh 十一,十二,use jxgl 十三,exec sp_grantdbaccess 'DESKTOP-7M8SQ9T','qh' 十四,exec sp_revokedbaccess qh 十五,十六,use jxgl;
十七,exec sp_addrole 'newrole'
十八,exec sp_addrolemember 'newrole','qh' 十九,二十,exec sp_droprole 'newrole' 二十一,二十二,use master
二十三,grant create database to qh 二十四,二十五,二十六,grant create table,create view to qh 二十七,二十八,grant select on s to qh,qxz,sly 二十九,三十,grant insert,delete on s to shen 三十一,三十二,grant update on s(age,dept)to shen 三十三,三十四,grant execute on sp_ins_s to shen 三十五,三十六,revoke create table,create view form sly 三十七,三十八,revoke select on s from qxz ,sly 四,实验心得
通过此次实验我了解了SQL Sever中有关用户、角色及操作权限等的管理方法,同时也更加注重数据库安全性方面的问题,我们创建的每一个数据库都应该考虑安全性问题,应该为数据库创建一些必要的角色,同时也要管理数据库的权限方面,防止数据向外流失,或者被黑客盗用。