sql中视图的创建,查询,更新与删除

引言

视图可以理解为查询后得出的结果表。此时有一个疑惑:
那直接把查询后得出的结果存为表不就行了?和视图有什么区别
答案是:前者当基本表作出修改后不会同步更新,而后者可以

1.视图的创建

1.1 语法

CREATE VIEW 视图名
[WITH ENCRYPTION]      --可选,表示视图是否加密--
AS
SELECT 查询语句
[WITH CHECK OPTION]  --可选,表示是否限制视图修改--

1.2 别名

在视图名后面列出字段名可以给视图中的字段起别名,如下

CREATE VIEW V_Sal(平均工资,最高工资,最低工资)

AS

SELECT AVG(salary),MAX(salary),MIN(salary)

FROM customer

括号内无需单引号

1.3 创建视图时的注意事项

image.png
如第二点所述,故要想排序,只能在查询时用 ORDER BY 语句,而非创建时

1.4 创建加密视图

若使用 WITH ENCRYPTION ,则视图被加密。主要作用在于定义视图的语句会被隐藏,而非视图本身

1.5 细说 WITH CHECK OPTION

  1. 对于 updateInsert ,若有 with check option ,则须保证修改或插入的数据在视图创建时的 WHERE 语句的条件范围内

[[简单来说就是加的东西要能被查到]]
若创建视图时候没有用 with check optionupdateInsert 的数据即便在条件之外也仍然可以运行,但是在视图中看不到,而基本表中却可以显现


例:创建价格小于2000的产品视图VIEW_CP_PRICE2000,要求加密并保证对该视图的更新都要符合价格小于2000这个条件

CREATE VIEW VIEW_CP_PRICE2000
WITH ENCRYPTION

AS

SELECT *
FROM product
WHERE price<2000
with check option
GO

UPDATE VIEW_CP_PRICE2000
SET price=4200
WHERE Pname='海尔洗衣机'
GO

运行结果:
image.png

消息 550,级别 16,状态 1,第 1 行
试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束。
语句已终止。

更改上例中的 UPDATE 语句如下

UPDATE VIEW_CP_PRICE2000
SET price=1999     --使得在WHERE范围内--
WHERE Pname='海尔洗衣机'

则运行成功


  1. 对于 delete ,有无 with check option 都一样;
  2. 对于没有 where 子句的视图,使用with check option是多余的。

2. 视图的查询

没啥别的可以说,就和查询表一样的语句

3. 视图的更新

这里的更新指的是修改其中内容,而非结构
仍然可以使用

  • UPDATE 更新数据

更新数据时有一些注意点如下
image.png

[[实验:不可更新视图测试]]


创建一个视图 V_Sal(AvgSal,MaxSal,Minsal): 查询所有客户的平均月薪,最高月薪和最低月薪.

CREATE VIEW V_Sal(AvgSal,MaxSal,Minsal)

AS

SELECT AVG(salary),MAX(salary),MIN(salary)

FROM customer

GO

SELECT *

FROM V_Sal

结果如图
image.png
试着向视图V_Sal中添加一行数据:

Insert into V_Sal(AvgSal,MaxSal,Minsal)

Values(5600,12680,2210)

GO

SELECT *

FROM V_Sal

image.png
预期一样会报错


  • INSERT 插入数据
  • DELETE 删除数据

4. 视图的删除

DROP VIEW 视图名称

删的挺干净,资源管理器里都查不到了,没啥好说

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LeavesWebber

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值