mysql练习-视图与完整性约束

本文探讨了MySQL中的视图特性,视图作为虚表,不存储数据,仅保存其定义。当基表数据变化时,视图查询结果随之更新。视图允许用户对数据进行插入、删除和修改,且可以通过WITH CHECK OPTION确保更新符合视图条件。视图的主要作用包括简化查询、逻辑独立性、数据安全和多角度查看数据。同时,提供了四个SQL视图创建示例,涉及不及格学生统计、信息系学生信息限制更新、平均成绩展示以及不及格成绩详细信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

视图的特点

  • 视图是一个虚表,是从一个或几个基本表(或视图)导出的表;
  • 只存放视图的定义,不存放视图对应的数据
  • 基表中的数据发生变化,从视图中查询出的数据也随之改变;
  • 视图一经定义,就可以和基本表一样被查询、删除。
    在这里插入图片描述
    视图的更新
  • 视图更新是指通过视图来插入、删除和修改数据。
  • 在行列子集视图中更新数据,更新的结果是基本表中的数据发生了更新。
  • 视图定义中的WITH CHECK OPTION对视图的更新进行强制检查,不符合视图定义条件的,不允许更新。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    视图的作用
  • 简化用户的操作
  • 使用户能以多种角度看待同一数据
  • 对重构数据库提供了一定程度的逻辑独立性
  • 能够对机密数据提供安全保护
  • 适当的利用视图可以更清晰的表达查询
  • 1 SQL视图:根据视图CJ_STUDENT创建视图CJ_TJ
    #已建有视图cj_student,视图中包含所有成绩不及格(含没有成绩)的学生的学号,姓名,课程名,成绩,按成绩降序排序。
    根据视图cj_student创建视图cj_tj,包含课程名,不及格人数,不及格人姓名列表(以 | 分割),按照不及格人数降序排列。
    学生数据库db_student包括三个数据表student(学生表)、course(课程表)和sc(选课表)。表结构如下:
    1)student(学生表):
    SNO学号CHAR(7)
    SNAME姓名CHAR(10)
    SSEX性别CHAR(2)
    SAGE年龄SMALLINT
    SDEPT所在系 VARCHAR(20)
    2)course(课程表)
    CNO课程号CHAR(10)
    CNAME课程名VARCHAR(20)
    CCREDIT学分SMALLINT
    SEMSTER学期SMALLINT
    PERIOD学时SMALLINT
    3)sc(选课表)
    SNO 学号CHAR(7)
    CNO 课程号CHAR(10)
    GRADE 成绩 SMALLINT
    [注意:SQL表名请用小写]
CREATE VIEW cj_tj AS 
SELECT 
  cname,
  COUNT(*) a,
  GROUP_CONCAT(sname SEPARATOR '|') 
FROM
  cj_student 
GROUP BY cname 
ORDER BY a DESC
  • 2
    SQL视图:建立视图IS_STUDENT
    #建立视图is_student,视图中包含信息系全体学生的基本信息。(要求限制更新)
    表结构如第一题。
create view is_student
as
select * from student where sdept='信息系'
with check option;
  • 3
    SQL视图:建立视图AVG_CJ
    #建立视图avg_cj,视图包括学生的学号以及他们的平均成绩(取整),按成绩降序排列。
    表结构如第一题。
create view avg_cj
as
select sno,round(avg(grade)) from sc 
group by sno order by round(avg(grade)) desc;
  • 4
    SQl视图:建立视图CJ_STUDENT
    #建立视图cj_student,视图中包含所有成绩不及格(含没有成绩)的学生的学号,姓名,课程名,成绩,按成绩降序排序。
    表结构如第一题。
CREATE VIEW cj_student AS 
SELECT 
    sc.`Sno`,sname,
    cname,
    grade 
FROM 
  student,
  course,
  sc 
WHERE  sc.`Sno`=student.`Sno`  
AND sc.`Cno`=course.`Cno` 
AND (grade<60 OR  grade IS NULL) 
ORDER BY grade DESC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值