一、数据更新
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权限。
对象的创建者拥有对象的所有权限,可授予、回收。