Oracle - Exp(3)_视图、授权控制与事务处理

1. SQL视图的定义与操纵

  例1-1: (建立视图)  建立计算机系的学生的视图STUDENT_CS。

  例1-2: (建立视图)  建立由学号和平均成绩两个字段的视图STUDENT_GR。

  例1-3: (视图查询)  利用视图STUDENT_CS,求年龄大于19岁的学生的全部信息。

  例1-4: (视图查询)  利用视图STUDENT_GR,求平均成绩为88分以上的学生的学号和平均成绩。

  例1-5: (视图更新)  利用视图STUDENT_CS,增加学生( ‘96006’,‘张然’,‘CS’,‘02’,‘男’,19 )。

  例1-6: (视图更新)  利用视图STUDENT_CS,将学生年龄增加1岁。观察其运行结果并分析原因。 

  例1-7: (视图更新)  利用视图STUDENT_GR,将平均成绩增加2分。观察其运行结果并分析原因。

  例1-8: (视图更新)  删除视图STUDENT_CS中学号为 ‘96006’ 的学生的全部数据。

  例1-9: (视图更新)  删除视图STUDENT_GR的全部数据。

  例1-10:(删除视图)  删除视图STUDENT_CS和STUDENT_GR。

2. SQL数据控制语句:

  例2-1: (授权)  给左右邻近同学(用户)授予在表Student上的SELECT权限,并使这两个用户具有给其他用户授予相同权限的权限。

  例2-2: (授权)  给邻近同学(用户)授予Teach表上的所有权限。

  例2-3: (授权)  给所有用户授予Score表上的SELECT权限。

  例2-4: (授权验证)  观察左右邻近同学查询你所授权的表中的内容。

  例2-5: (收回授权)  收回上面例子中的所有授予的权限。

3. SQL事务处理:

  例3-1: (事务回退)  将课程名称表中的 ‘程序设计’ 课程学时数修改为80、 ‘编译原理’ 课程学时数修改为70学时,查询全部课程的总学时数后,取消所有修改(ROLLBACK)。再次查询全部课程的总学时数。注意比较分析两次查询的结果。

  例3-2: (事务提交)  将课程名称表中的 ‘程序设计’ 课程学时数修改为80、 ‘编译原理’ 课程学时数修改为70学时,查询全部课程的总学时数后,确认所有修改(COMMIT)。再次查询全部课程的总学时数。注意比较分析两次查询的结果。



--例1-1: (建立视图)  建立计算机系的学生的视图STUDENT_CS。
CREATE OR REPLACE VIEW STUDENT_CS
AS
SELECT * FROM STUDENT WHERE SDEPT='CS';

--例1-2: (建立视图)  建立由学号和平均成绩两个字段的视图STUDENT_GR。
CREATE OR REPLACE VIEW STUDENT_GR
AS
SELECT SNO,AVG(SCORE) AS AVG_SCORE FROM SCORE GROUP BY SNO;

--例1-3: (视图查询)  利用视图STUDENT_CS,求年龄大于19岁的学生的全部信息。
SELECT * FROM STUDENT_CS WHERE SAGE>19;

--例1-4: (视图查询)  利用视图STUDENT_GR,求平均成绩为88分以上的学生的学号和平均成绩。
SELECT * FROM STUDENT_GR WHERE AVG_SCORE>=88;

--例1-5: (视图更新)  利用视图STUDENT_CS,增加学生( ‘96006’,‘张然’,‘CS’,‘02’,‘男’,19 )。
INSERT INTO STUDENT_CS VALUES( '96006','张然','CS','02','男',19 );
--直接实现对原表的数据插入

--例1-6: (视图更新)  利用视图STUDENT_CS,将学生年龄增加1岁。观察其运行结果并分析原因。  
UPDATE STUDENT_CS SET SAGE=SAGE+1;
--PASS

--例1-7: (视图更新)  利用视图STUDENT_GR,将平均成绩增加2分。观察其运行结果并分析原因。
UPDATE STUDENT_GR SET AVG_SCORE=AVG_SCORE+2;
--不能对含有组函数的视图进行更新操作

--例1-8: (视图更新)  删除视图STUDENT_CS中学号为 ‘96006’ 的学生的全部数据。
DELETE FROM STUDENT WHERE SNO='96006';

--例1-9: (视图更新)  删除视图STUDENT_GR的全部数据。
--DELETE FROM STUDENT_GR; 这条语句无法执行

--例1-10:(删除视图)  删除视图STUDENT_CS和STUDENT_GR。
DROP VIEW STUDENT_CS;
DROP VIEW STUDENT_GR;


--例2-1: (授权)  给左右邻近同学(用户)授予在表Student上的SELECT权限,并使这两个用户具有给其他用户授予相同权限的权限。
GRANT SELECT ON AHUT.STUDENT TO COMMON_USE WITH GRANT OPTION;

--例2-2: (授权)  给邻近同学(用户)授予Teach表上的所有权限。
GRANT ALL ON AHUT.TEACH TO COMMON_USE;

--例2-3: (授权)  给所有用户授予Score表上的SELECT权限。
GRANT SELECT ON SCORE TO PUBLIC;

--例2-4: (授权验证)  观察左右邻近同学查询你所授权的表中的内容。
--在邻近表中:
SELECT * FROM AHUT.STUDENT;

--例2-5: (收回授权)  收回上面例子中的所有授予的权限。
REVOKE SELECT ON AHUT.STUDENT FROM COMMON_USE;
REVOKE ALL ON AHUT.TEACH FROM COMMON_USE;
REVOKE SELECT ON SCORE FROM PUBLIC;


--例3-1: (事务回退)  将课程名称表中的 ‘程序设计’ 课程学时数修改为80、 ‘编译原理’ 课程学时数修改为70学时,
--查询全部课程的总学时数后,取消所有修改(ROLLBACK)。再次查询全部课程的总学时数。注意比较分析两次查询的结果。
UPDATE COURSE SET CTIME=80 WHERE CNAME='程序设计';
UPDATE COURSE SET CTIME=70 WHERE CNAME='编译原理';
SELECT CNAME,CTIME FROM COURSE;
ROLLBACK;

--例3-2: (事务提交)  将课程名称表中的 ‘程序设计’ 课程学时数修改为80、 ‘编译原理’ 课程学时数修改为70学时,
--查询全部课程的总学时数后,确认所有修改(COMMIT)。再次查询全部课程的总学时数。注意比较分析两次查询的结果。
UPDATE COURSE SET CTIME=80 WHERE CNAME='程序设计';
UPDATE COURSE SET CTIME=70 WHERE CNAME='编译原理';
SELECT CNAME,CTIME FROM COURSE;
COMMIT WORK;

 

你可能感兴趣的:(Oracle,ORACLE)