视图操作 第3关:在视图中插入、修改、删除数据

任务描述

本关任务:


相关知识

为了完成本关任务,你需要掌握:
1.创建视图
2.插入数据
3.更新数据
4.删除数据

语法

1.使用CREATE VIEW语句创建视图
语法格式:
CREATE [OR REPLACE] VIEW 视图名 [(列名列表)]
AS select语句
[WITH [CASCADED | LOCAL] CHECK OPTION]

列名列表:要想为视图的列定义明确的名称,可使用可选的列名列表子句,列出由逗号隔开的列名。列名列表中的名称数目必须等于SELECT语句检索的列数。若使用与源表或视图中相同的列名时可以省略列名列表。
WITH CHECK OPTION:指出在可更新视图上所进行的修改都要符合select语句所指定的限制条件,这样可以确保数据修改后,仍可通过视图看到修改的数据。

  1. 可更新视图
    要通过视图更新基本表数据,必须保证视图是可更新视图,即可以在INSET、UPDATE或DELETE等语句当中使用它们。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。还有一些特定的其他结构,这类结构会使得视图不可更新。如果视图包含下述结构中的任何一种,那么它就是不可更新的:
    (1)聚合函数;
    (2)DISTINCT关键字;
    (3)GROUP BY子句;
    (4)ORDER BY子句;
    (5)HAVING子句;
    (6)UNION运算符;
    (7)位于选择列表中的子查询;
    (8)FROM子句中包含多个表;
    (9)SELECT语句中引用了不可更新视图;

3.insert 插入
4.update更新
5.delete删除

测试如下:

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1、创建视图View_student: ``` CREATE VIEW View_student AS SELECT * FROM Student WHERE major = '计算机软件'; ``` 2、创建视图View_student_male: ``` CREATE VIEW View_student_male AS SELECT s.sid, s.name, sc.cno, sc.grade FROM Student s, StuCou sc WHERE s.sid = sc.sid AND s.major = '计算机软件' AND s.gender = '男'; ``` 3、创建视图View_student_avg: ``` CREATE VIEW View_student_avg AS SELECT sid AS '学号', AVG(grade) AS '均分' FROM StuCou GROUP BY sid; ``` 4、查询平均成绩在80以上的学生: ``` SELECT * FROM View_student_avg WHERE 均分 >= 80; ``` 5、插入一条记录并比较变化: ``` -- 插入前 SELECT * FROM View_student; INSERT INTO Student VALUES ('2021001', '张三', '男', '计算机软件'); -- 插入后 SELECT * FROM View_student; -- 插入前 SELECT * FROM View_student_avg; INSERT INTO StuCou VALUES ('2021001', '101', 90); -- 插入后 SELECT * FROM View_student_avg; SELECT * FROM StuCou; ``` 如果插入的记录的专业与视图不同,则插入前后视图和基本表的数据无变化。如果一定要删除View_student“刘丽”的记录,需要使用DELETE语句,但这会同时删除基本表的记录,可能会影响其他视图数据。如果只想删除View_student的记录,可以使用INSTEAD OF DELETE触发器来实现。 6、修改视图View_student_male: ``` UPDATE View_student_male SET grade = grade + 5 WHERE cno = '101'; ``` 7、根据姓名删除View_student的记录: ``` DELETE FROM View_student WHERE name = '刘丽'; ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Asshebabyฅ

学生请勿打赏,点赞转发关注就行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值