MySQL学习---->第三练:语句初步(数据更新、视图、数据控制)


一、数据更新

     1、插入数据

     INSERT
     1)插入单个元组:
     eg: 插入一条选课记录('95020','1') 。
         INSERT INTO SC(Sno, Cno) VALUES('95020', '1' );

     2)插入子查询结果:
     eg:求每个系学生的平均年龄,并把结果存入数据库。
     
分两步:
     A.建立一个新表放系名年龄
     create table SA (Sdept varchar(6),avg smallint);

     B.对Student表按系分组求平均年龄,把结果存入新表中。
     INSERT INTO SA(Sdept, Avg)
          SELECT Sdept, AVG(Sage)
          FROM Student
          GROUP BY Sdept;

     2、修改数据

     UPDATE
     eg:将学生95001的年龄改为22岁,姓名改为‘王宏’。
        UPDATE Student SET Sage=22, Sname= '王宏'
        WHERE Sno='95001';

     eg:将所有学生的年龄增加1岁。
        UPDATE Student SET Sage=Sage+1;

     3、删除数据

     DELETE
     eg:删除学号为95001的学生记录。
            DELETE FROM Student WHERE Sno='95001';
     eg:删除所有的学生选课记录。  DELETE FROM SC;

二、视图

     1.概述

     
    

     2.视图定义

     CREATE VIEW<视图名>[(<列名>[,<列名>]...)]
     AS<子查询>
     [WITHCHECK OPTION]
     
     eg:建立西安地区学生视图。
     create view XA_stu as select Sid,Sname,Scity,Sage from Student where Scity='西安';

   
     DBMS执行CREATE VIEW语句时只把视图定义存入数据字典,并不执行其中的SELECT语句。只有对视图进行查询时,才按视图的定义从基本表中将数据查出

     视图也可以定义在多个基本表上
      视图可以定义在视图上,或定义在基本表和视图上

     删除视图: 当视图失效时要删除它:
     DROP VIEW <视图名>

     视图删除后,由它导出的视图也将失效,应将他们删除。

     3、更新视图

    更新视图: 插入、删除、修改

    对视图的更新最终要转换为基本表的更新。

    为防止用户通过视图操作不属于视图的基本表数据,可在定义视图时加上WITH CHECK OPTION,视图更新时DBMS会检查视图定义中的条件,不满足条件则拒绝执行。

     eg:将视图IS_Student中学生95002的姓名改为“刘辰”。

      UPDATE IS_Student
      SET Sname='刘辰'
      WHERE Sno='95002'
     执行时转换成对基本表的更新:
      UPDATE Student
      SET Sname='刘辰'
      WHERE Sno='95002' 

更新视图时,只能更新权限范围内的数据。超出了范围,就不能更新。

     4、视图的用途

     合理使用视图有下列好处:
     (1) 能够简化用户的操作
     隐藏复杂的多表查询过程,通过视图使用所关心的数据,不必了解视图数据来源的具体细节
     (2) 能以不同方式看待同一数据(定义不同的视图)
     因为同一个数据库往往有多种不同的用户。
     (3)对重构数据库提供了一定程度的逻辑独立性
     数据库重构:关系分解、增加关系、增加字段等。
     逻辑数据独立性重构时只需修改视图定义,不必修改程序。
     视图只能在一定程度上提供逻辑数据独立性:由于视图更新是有条件的,因此重构时数据更新语句可能仍要修改。
     (4)视图能够对机密数据提供安全保护
     对不同的用户定义不同的视图,使机密数据不出现在不应看到这些数据的用户视图上,达到保护机密数据的目的

三、数据控制

     1、授权

     用GRANT语句向用户授予操作权限

       GRANT <权限>[,<权限>]...
       [ON<对象名>] TO<用户>[,<用户>]...
       [WITH GRANTOPTION]

     WITH GRANT OPTION:获得某种权限的用户可以把权限再授予别的用户。

例1 把Student表的SELECT权限授给用户U1。

  GRANT SELECT ON Student TOU1

例2 把Student表的全部权限授予用户U2和U3。

  GRANT ALL PRIVILEGES
  ON Student TO U2, U3

例3 把表SC的查询权限授予所有用户。

  GRANT SELECT ON SC TO PUBLIC

例4 把查询Student表和修改学生学号的权限授给用户U4。

要授予表Student的SELECT权限和列Sno的UPDATE权限。
  GRANT UPDATE(Sno), SELECT
  ON Student TO U4

例5 把表SC的INSERT权限授予U5用户,并允许传播。

  GRANT INSERT ON SC TO U5
  WITH GRANT OPTION;
  
  #U5可以将此权限授予U6:

  GRANT INSERT ON SC TO U6
  WITH GRANT OPTION;

  #U6还可以将此权限授予U7:

  GRANT INSERT ON SC TO U7
  
  #U7不能再传播此权限。

例6 DBA把在数据库S_C中建立表的权限授予用户U8。

  USE S_C
  GRANT CREATE TABLE TO U8
 

     2、回收权限

     用REVOKE收回授权,格式为:

         REVOKE <权限>[,<权限>]...
         [ON <对象名>]
         FROM <用户>[,<用户>] ...

例7 把用户U4修改学生学号的权限收回。

       REVOKE UPDATE(Sno) ON Student FROM U4

例8 收回所有用户对表SC的查询权限。

       REVOKE SELECT ON SC FROM PUBLIC

例9 把用户U5对SC表的INSERT权限收回。

       REVOKE INSERT ON SC FROM U5
       #在例5中,U5-->U6-->U7,此REVOKE语句同时收回U5、U6、U7对SC表的INSERT权限。

对象的创建者拥有对象的所有权限,可授予、回收。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值