MySQL《视图》

create database StudentManage;

use StudentManage;

create table Student
(Sno int primary key,
Sname nchar(10) ,
Ssex nchar(2),
Sage int,
Sdept nvarchar(30));

create table Course
(Cno int primary key,
Cname nvarchar(30),
Cpno int,
Ccredit int);

create table SC
(Sno int,
Cno int,
Grade int,
primary key(Sno,Cno));

insert into Student
values(201215121,'李勇','男',20,'CS'),
(201215122,'刘晨','女',19,'CS'),
(201215123,'王敏','女',18,'MA'),
(201215124,'张立','男',19,'IS');


insert into Course
values(1,'数据库',5,4),(2,'数学',NULL,2),
(3,'信息系统',1,4),(4,'操作系统',6,3),
(5,'数据结构',7,4),(6,'数据处理',NULL,2),
(7,'PASCAL',6,4);

insert into SC 
values(201215121,1,92),(201215121,2,85),
(201215121,3,88),(201215122,2,90),(201215122,3,80);

1.从Student表中建立查询所有男生信息的视图 STU_SEX。 视图的列名为SNO、SNAME、SSEX和SAGE。 通过此视图分别添加一条男生信息(201215125,‘孙武’,‘男’,21)和一条女生信息(201215126,‘李兰’,‘女’,20),看是否能够成功。

①创建视图命令;②添加男生信息命令;③添加男生信息是否成功(回答yes或no);④添加女生信息命令;⑤添加女生信息是否成功(回答yes或no)。
正确答案:

第一空:
CREATE VIEW STU_SEX (SNO, SNAME, SSEX, SAGE) AS SELECT sno,sname,ssex,sage FROM student WHERE ssex = ‘男’;

第二空:
INSERT INTO STU_SEX VALUES(201215125,‘孙武’,‘男’,21);

INSERT INTO STU_SEX(SNO,SNAME,SSEX,SAGE) VALUES(201215125,‘孙武’,‘男’,21);

第三空:
yes

第四空:
INSERT INTO STU_SEX VALUES(201215126,‘李兰’,‘女’,20);

INSERT INTO STU_SEX(SNO,SNAME,SSEX,SAGE) VALUES(201215126,‘李兰’,‘女’,20);

第五空:
yes

2.从 Course 表中建立查询所有课程先修课信息的视图 COURSE_PRE。 视图的列名为课程号、课程名称和先修课名称。

CREATE VIEW COURSE_PRE (课程号, 课程名称, 先修课名称)
AS SELECT c1.cno, c1.cname, c2.cname
FROM course c1
JOIN course c2
ON c1.cpno = c2.cno;

3.从SC表中建立查询成绩大于等于85的学生成绩信息的视图 STU_CJ1。 视图的列名为学号、课程号和成绩。

CREATE VIEW STU_CJ1 (学号,课程号,成绩)
AS SELECT sno, cno, grade FROM SC WHERE grade >= 85;

4.从Student、SC和Course三个表建立查询学生选修情况的视图 STU_CJ2。 视图的列名为姓名、课程名称和成绩。

CREATE VIEW STU_CJ2 (姓名,课程名称,成绩)
AS SELECT s.sname, c.cname, sc.grade
FROM student s
JOIN sc
ON s.sno = sc.sno
JOIN course c
ON sc.cno = c.cno;

5.从Student、SC和Course三个表建立视图 STU_CJ3, 查询学生选修课程成绩小于90的成绩情况。 视图的列名为姓名、课程名称和成绩。

create view stu_cj3(姓名,课程名称,成绩) as select
s.Sname,c.Cname,sc.Grade from student s join sc
on s.Sno=sc.Sno
join course c
on sc.Cno=c.Cno
where sc.grade<90;

6.利用SQL命令修改视图 STU_SEX。把视图的列名改为学号、姓名、性别和年龄, 并加上“WITH CHECK OPTION”选项。 通过该视图分别添加一条男生信息(201215127,‘王刚’,‘男’,20)和女生信息(201215128,‘林徐’,‘女’,18),看是否能够成功。 总结with check option语句所起的作用。 ①修改视图命令; ②添加男生信息命令;③添加男生信息是否成功(回答yes或no);④添加女生信息命令; ⑤添加女生信息是否成功(回答yes或no); ⑥总结with check option 语句所起的作用

第一空:
create or replace view stu_sex(学号,姓名,性别,年龄) as select

sno,sname,ssex,sage

from student

where ssex=‘男’

with check option;

第二空:
insert into stu_sex values(201215127,‘王刚’,‘男’,20);

第三空:
yes

第四空:
insert into stu_sex values

(201215128,‘林徐’,‘女’,18);

第五空:
no

第六空:
创建视图时添加 with check option 子句,在视图插入(或更新)数据时, 进行条件检查,如果性别为男,符合条件,可以插入,如果性别为女,不符合条件, 则返回错误。

7.删除视图 STU_CJ3。

DROP VIEW STU_CJ3; DROP VIEW IF EXISTS STU_CJ3;

8.创建简单user1,密码为123456。

CREATE USER user1 IDENTIFIED BY ‘123456’;

9.创建视图 view_1,查询所有学生的姓名、所在系(没有特别指明, 不用定义视图字段名称,以下同)。

CREATE VIEW view_1 AS SELECT sname, sdept FROM student;

10.创建视图view_2,查询所有学生的姓名、所在系,同时指定DEFINER为user1。

create definer=‘user1’ view view_2
as select Sname,Sdept
from student;

11.创建视图 view_3,查询所有学生的姓名、所在系,同时指定SQL SECURITY为INVOKER。

CREATE SQL SECURITY INVOKER VIEW view_3
AS SELECT Sname,Sdept FROM student;

12.为user1用户授予查询视图view_1,view_2,view_3的权限。 ①此处只写为user1用户授予查询视图view_1权限的命令。

GRANT SELECT ON Studentmanage.view_1 TO user1;

13.切换user1用户登录,分别查看视图view_1,view_2,view_3。根据查询结果,解释DFINER和SQL SECURITY INVOKER所起的作用是什么。 ①能否查询到view_1数据,回答yes或no;②能否查询到view_2数据,回答yes或no;③能否查询到view_3数据,回答yes或no;④DFINER所起的作用;⑤SQL SECURITY INVOKER所起的作用。

正确答案:

第一空:
YES

第二空:
NO

第三空:
NO

第四空:
指定视图的定义者。

第五空:
指定根据谁的权限来操作视图。

猜你喜欢

转载自blog.csdn.net/ziyue13/article/details/112073533