微软数据库教程MSSQL:建立&修改视图

mssql sqlserver 视图综合简介(sql入门者必备)

摘要:
在Db中视图是一张虚拟表,拥有展示数据的能力,但是不占用物理空间,
视图中的行列数据及数据类型都来源于物理表。
下文将讲述视图的创建、查看、修改、更新、删除等操作。


1.视图的简介

视图可以由:一张或多张物理表或视图或函数;
视图可以由:一串可以返回一个虚拟表的sql查询语句组成。
视图:可以保障数据库系统的安全性,避免多余的字段暴漏给不相关的用户。
视图数据都是虚拟生成的。 


2.视图的分类

sqlserver视图分为以下三种:
标准视图、索引视图、分区视图
————————————————————–
2.1:标准视图
标准视图由一张或多张物理数据表组成,使视图只返回用户所需的数据。
2.2:索引视图
为视图创建相应的索引,使视图被存储,可加快数据的检索速度,提升对视图的操作性能。
2.3:分区视图
将多台服务器上的数据组合成一个虚拟表,方便用户使用。 


三:视图的优点和功能

1.便利性
使用视图,里面保存的数据一般都是用户所需数据,无关数据不会在视图中被定义。
2.安全性
我们可以设置只读视图,使用户无法修改数据
设置视图后,用户操作视图,无法获取物理表的名称,增加了数据库的安全。
使用视图后,当物理表发生结构性变化时,只需调整视图中的关联性,这些变化对用户来说不可见,增加了DB的安全性,
和数据库的易用性。 


四:视图的基本操作方法

1创建视图

 CREATE VIEW [视图名称]
 AS
     ---sql脚本
 go
 ---例:
create table test(
    id int identity(1,1) primary key,
    shopName nvarchar(20), 
    qty int,
)
insert into test (shopName,qty)
values
    ('落伍老站长',198),
    ('zhzz.org',68) ;
--创建视图
if (exists (select * from sys.objects where name = 'vw_test'))
    drop view vw_test
go
---例:只呈现给用户销量大于100的客户名称
create view vw_test 
as
select shopName,qty from test where qty>100;
--执行视图
select * from vw_test;

可以通过sp_helptext 视图名称 获取视图的定义内容

—————视图加密——————-

--加密视图
if (exists (select * from sys.objects where name = 'vw_test_encryption'))
    drop view vw_test_encryption
go
create view vw_test_encryption
with encryption --加密
as
    select shopName,qty from test where qty>100;
go
--view_definition is null
--查看加密视图
select * from information_schema.views 
where table_name like 'vw_test_encryption';

——————–视图修改数据————————–
2.视图修改数据

create table test(
    id int identity(1,1) primary key,
    shopName nvarchar(20), 
    qty int,
)
insert into test (shopName,qty)
values
    ('落伍老站长',198),
    ('zhzz.org',68) ;
--创建视图
if (exists (select * from sys.objects where name = 'vw_test'))
    drop view vw_test
go
---例:只呈现给用户销量大于100的客户名称
create view vw_test 
as
select shopName,qty from test where qty>100;
go
---视图插入数据操作
insert into vw_test(shopName,qty)values('aa',111190)
go
--运行视图
select * from vw_test
go

--视图修改数据操作
update vw_test set qty =1008 where shopName='aa'
go
--运行视图
select * from vw_test
go

--视图修改数据操作
delete  from vw_test  where shopName='aa'
go
--运行视图
select * from vw_test
go
 
drop view vw_test
drop table test

3.修改视图

alter view vw_test 
as
select * from test where qty>8;

4.删除视图

drop view vw_test --删除单个视图
go
drop view vw1,vw2,vw3...  ---同时删除多个视图

五:视图与表不同之处

5.1 数据来源不同
视图是一串编译好的sql脚本,视图的数据来源是sql脚本查询
表是物理表,数据来源用户插入
5.2 占用空间不同
视图除索引视图会占用空间外,其它类型的视图可以理解为不占用任何物理空间
表:必须占用物理空间进行数据存储
5.3 包含关系不同
视图可以包含表
表:是一个单独的个体,只可在表定义时包含特定的函数
5.4 互相影响关系
视图,对视图本身的删除 新增 修改 不会影响表
表,对表的结构进行变更可能会影响视图的可用性

 

 

话说工作到现在,其实视图用的很少,不过一些特性还是不能忘的,记录如下:

一、建立视图
IF OBJECT_ID(‘Sales.OrderTotalsByYear’, ‘V’) IS NOT NULL
DROP VIEW Sales.OrderTotalsByYear;
GO
例一:
CREATE VIEW Sales.OrderTotalsByYear
WITH SCHEMABINDING , –在修改用于生成当前视图的表或视图时,一旦对当前视图产生影响(导致视图失效),则不允许修改。
ENCRYPTION –加密,不能编辑(加密等级并不高)
AS
SELECT YEAR(O.orderdate) AS orderyear ,
SUM(OD.qty) AS qty
FROM Sales.Orders AS O
JOIN Sales.OrderDetails AS OD ON OD.orderid = O.orderid
GROUP BY YEAR(orderdate);
GO
例二:
CREATE VIEW dbo.viewTestIndexInfo
AS
SELECT DISTINCT
Employees.*
FROM Employees
JOIN Sales ON Employees.EmployeeID = Sales.EmployeeID
WHERE Title = ‘Sales Person’
WITH CHECK OPTION –如过视图中有where语句,通过view来修改表格的时候有可能更新掉 where条件之外的行,该选项用来强制更改的内容必须匹配where条件
### 二、查看数据库内的视图
–To explore view metadata using T-SQL, you can query the sys.views catalog view:
USE TSQL2012;
GO
SELECT name, object_id, principal_id, schema_id, type
FROM sys.views;

–You can also query the INFORMATION_SCHEMA.TABLES system view, but it is slightly more complex:
SELECT SCHEMA_NAME, TABLE_NAME, TABLE_TYPE
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = ‘VIEW’;
### 三、修改视图
ALTER VIEW Sales.OrderTotalsByYear
WITH SCHEMABINDING
AS
SELECT O.shipregion ,
YEAR(O.orderdate) AS orderyear ,
SUM(OD.qty) AS qty
FROM Sales.Orders AS O
JOIN Sales.OrderDetails AS OD ON OD.orderid = O.orderid
GROUP BY YEAR(orderdate) ,
O.shipregion;
GO
### 四、通过视图修改记录
–通过视图增加记录 如果视图带了CHECK OPTION 选项,那么插入的数据必须跟随WHERE条件
INSERT vEmployees
SELECT 3 ,
‘xxx’ ,
‘xx’

原文链接:,转发请注明来源落伍老站长!

发表评论