视图
一、定义视图
语法:
CREATE VIEW <视图名> [(<列名> [,<列名>]…)] AS <子查询>[WITH CHECK OPTION];
示例:
1、建立信息系学生的视图
createviewIS_View as select Sno,Sname,Ssex,Sage,Sdeptfrom StudentwhereSdept='信息系';
2、建立信息系学生的视图,并要求透过该视图进行的更新操作只涉及信息系学生
createviewIS_View as select Sno,Sname,Ssex,Sage,Sdeptfrom StudentwhereSdept='信息系'withcheckoption;
3、建立信息系选修了c01号课程的学生视图
createviewIS_View (Sno,Sname,Grade)asselect Student.Sno,Sname,GradefromStudent,SCwhereSdept='信息系'
and Cno='c01'andStudent.Sno=SC.Sno
二、查询视图
示例:
1、在信息系学生的视图中找出年龄小于20岁的学生
selectSno,Sname,SagefromIS_Student where Sage<</span>20;
2、查询信息系选修了c01号课程的学生学号和姓名
select SC.Sno,SnamefromIS_Student,SCwhere IS_Student.Sno =SC.SnoandSC.Cno='c01';
三、更新视图
示例:
1、将信息系学生视图IS_Student中学号95002的学生姓名改为“刘辰”
update IS_Studentset Sname='刘辰' whereSno= '95002';
或 updateStudentsetSname='刘辰'whereSno='95002'ANDSdept= '信息系';
2、向信息系学生视图IS_S中插入一个新的学生记录:95029,赵新,20岁
insertintoIS_Student values('95029','赵新',20,'信息系');
3、删除视图IS_Student 中学号为95029的记录
deletefromIS_Student where Sno='95029';
或 deletefromStudentwhereSno='95029'ANDSdept='信息系';
四、删除视图
语法:
DROP VIEW <视图名>;
示例:
1、删除视图IS_View
dropviewIS_View;
注:组成视图的属性列名
I、省略:
由子查询中SELECT目标列中的诸字段组成
II、明确指定视图的所有列名:
(1) 某个目标列是集函数或列表达式
(2) 目标列为 *
(3) 多表连接时选出了几个同名列作为视图的字段
(4) 需要在视图中为某个列启用新的更合适的名字
数据安全性
一、授权
语法:
GRANT <权限>[,<权限>]...[ON <对象类型> <对象名>] TO <用户>[,<用户>]...[WITH GRANT OPTION];
示例:
1、把查询Student表权限授给用户U1
grantselecton Student to u1;
2、把对Student表和Course表的全部权限授予用户U2和U3
grantallprivileges on Student,Coursetou2,u3;
3、把对表SC的查询权限授予所有用户
grantselecton SC to public;
4、把查询Student表和修改学生学号的权限授给用户U4
grantselect,update(Sno)onStudent to u4;
5、把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户
grantinserton SC to u5 withgrant option;
二、收回
语法:
REVOKE <权限>[,<权限>]...[ON <对象类型> <对象名>] FROM <用户>[,<用户>]...;
示例:
1、把用户U4修改学生学号的权限收回
revoke update(Sno)onStudent from u4;
2、收回所有用户对表SC的查询权限
revokeselect)on SC frompublic;
3、把用户U5对SC表的INSERT权限收回
revokeinserton SC from u5;
数据库角色
一、 角色的创建
语法:
CREATE ROLE <角色名>
示例:
1、创建一个角色 R1
createroleR1;
二、 给角色授权
语法:
GRANT <权限>[,<权限>]… ON <对象类型>对象名 TO <角色>[,<角色>] …
示例:
1、角色R1拥有Student表SELECT、UPDATE、INSERT权 限
grantselect,update,insertonStudent to R1;
三、将一个角色授予其他的角色或用户
语法:
GRANT <角色1>[,<角色2>]… TO <角色3>[,<用户1>]…[WITH ADMIN OPTION]
示例:
1、将角色R1授予王平,张明,赵玲
grantR1to 王平,张明,赵玲;
四、角色权限的收回
语法:
REVOKE <权限>[,<权限>]…ON <对象类型> <对象名> FROM <角色>[,<角色>]…
示例:
1、通过R1来回收王平的这3个权限
revokeR1from 王平;
附录一:
查 询 条 件 | 谓 词
|
比 较 | =,>,<</span>,>=,<=,!=,<>,!>,!<</span>;NOT+上述比较运算符 |
确定范围 |
BETWEEN AND,NOT BETWEEN AND
|
确定集合 |
IN,NOT IN
|
字符匹配 |
LIKE,NOT LIKE
|
空 值 | IS NULL,IS NOT NULL |
多重条件(逻辑运算) | AND,OR,NOT |
附录二:
以上文章中将以学生-课程数据库作为一个例子来讲解SQL的数据定义、数据操作、数据查询和数据控制语句的具体应用。
其数据表如下所示:
学生表:Student(Sno,Sname,Ssex,Sage,Sdept)
课程表:Course(Cno,Cname,Cpno,Ccredit)
学生选课表:SC(Sno,Cno,Grade)
Student
学 号 Sno | 姓 名 Sname | 性 别 Ssex | 年 龄 Sage | 所 在 系 Sdept
|
200215121
200215122
200215123
200515125 | 李勇
刘晨
王敏
张立 | 男
女
女
男 | 20
19
18
19 | CS
CS
MA
IS
|
Course
课程号 Cno | 课程名 Cname | 先行课 Cpno | 学分 Ccredit
|
1
2
3
4
5
6
7 | 数据库
数学
信息系统
操作系统
数据结构
数据处理
PASCAL语言 | 5
1
6
7
6 | 4
2
4
3
4
2
4
|
SC
学 号 Sno | 课程号 Cno | 成绩 Grade
|
200215121 200215121 200215121 200215122 200215122 | 1 2 3 2 3 | 92 85 88 90 80
|