zoukankan      html  css  js  c++  java
  • oracle数据库基本操作四——视图、授权控制与事务处理

    4. SQL视图的定义与操纵

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

    create view student_cs as select sno,sname,ssex,sage,sdept,sclass from student where sdept = 'CS' with check option;

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

    create view student_gr as select sno,avg(score) as avgsc from score group by sno;

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

    select * from student_cs where sage > 19;

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

    select * from student_gr where avgsc > 88;

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

    insert into student_cs(sno,sname,sdept,sclass,ssex,sage) values('96006','张然','CS','02','',19);

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

    update student_cs set sage = sage + 1;

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

    update student_gr set avgsc = avgsc + 2;
    //ORA-01732: 此视图的数据操纵操作非法

      出现错误原因,在创建视图时,没有在末尾加上with check option ;

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

    delete from student_cs where sno = '96006';

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

    drop view student_gr;

    //正确答案应该是 delete from student_gr;

      用delect 删除不了student_gr,  原因:在创建视图时,没有在末尾加上with check option ;

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

     drop view student_cs;
     //drop view student_gr;

    5. SQL数据控制语句:

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

    grant select on student to sno_74276,sno_74278 with grant option;

      若没有用户需创建用户,方法为:

    •  创建用户:create user 用户名 identified by 密码;
    •  解锁:alter user 用户名 account unlock; 
    •  赋权:grant sysdba to 用户名;  

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

    grant all on teach to sno_74276 with grant option;

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

     grant select on score to public ;

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

    conn sno_74276/s123
    select * from sunc.student;//可以查询
    select * from sunc.course;//不允许查询未赋权表或者视图
    delete from sunc.student where sname = '**晨';//权限不足
    select * from sunc.score;//可以访问
    ......

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

    revoke select on student from sno_74276,sno_74278;
    revoke all on teach from sno_74276;
    revoke select on score from public;

    6. SQL事务处理:

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

    update course set ctime = 80 where cname = '程序设计';
    update course set ctime = 70 where cname = '微机原理';
    rollback;

      update 修改ctime之后,数据确实被修改了,但是并没有用commit进行提交,所以在使用rollback事务回退时,会返回原来的数据;

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

    update course set ctime = 80 where cname = '程序设计';
    update course set ctime = 70 where cname = '微机原理';
    commit;//事务提交
    rollback;//事务回退

    在进行事务提交之后修改后的数据被保存下来,在使用事务回退,并不会返回最初始的值;

    本次操作中出现的错误及解决方法:

    1、ORA-01045: user SNO_74276 lacks CREATE SESSION privilege; logon denied

    分析:创建User时没有给赋上create session权限

    解决方法:grant create session,resource to sno_74276;

    2、SP2-0640: 未连接

    解决方法:用sysdba 登录  如 conn sys as sysdba/s123;

     

  • 相关阅读:
    做个坚强的逆行者,献给终日奋斗的你我——《当幸福来敲门》
    学习jvm,关于MAT an internal error occurred during:"Parsing heap dump" from问题
    很详尽KMP算法(厉害)
    插入排序[数据结构](复习)
    JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat(复制)
    Hadoop集群配置搭建
    Tomcat IO阻塞异常
    centos通过yum安装jdk
    关于PHPExcel上传Excel单元格富文本和时间类型读取数据问题
    负载均衡集群总结(Haproxy)
  • 原文地址:https://www.cnblogs.com/a1982467767/p/7778967.html
Copyright © 2011-2022 走看看