数据库视图
注:此文转自李黎敏
CREATE VIEW view_partAS SELECT 员工表.编号,员工表.姓名,员工表.性别,员工表.所属部门,项目表.项目编号,项目表.名称FROM 项目表 INNER JOIN 员工表 ON 项目表.负责人 = 员工表.编号WHERE 员工表.所属部门='项目部'
例子2:定义视图时指定别名并加密
CREATE VIEW 项目信息视图(项目名称,项目客户,项目负责人,开始日期,【计划工期(天)】) with encryption
AS
SELECT 项目表.名称,客户表.客户名称,员工表.姓名,项目表.开始日期,DATEDIFF(day,项目表.开始日期,项目表.结束日期)
FROM 项目表 INNER JOIN 员工表 ON 项目表.负责人 = 员工表.编号 INNER JOIN 客户表 ON 项目表.客户 = 客户表.客户编号
WHERE 员工表.所属部门='项目部'
CREATE VIEW ygb_view
AS
SELECT * FROM 员工表 WHERE 员工表.性别=‘女’
执行下列语句,插入新记录:
INSERT INTO ygb_view(姓名,性别,工资)values(‘李立三’,‘男’,2300)
插入操作成功,但不合理!解决办法:使用with check option,程序清单如下:
CREATE VIEW ygb_view AS SELECT * FROM 员工表 WHERE 员工表.性别=‘女’With check option
同样,插入新记录:INSERT INTO ygb_view(姓名,性别,工资) values(‘李立三’,‘男’,2300)
插入操作将失败!
注意:视图是虚拟表,其本身不存储数据(来自其引用表),添加的数据是存储于视图参照的数据表中。
使用视图前提条件
1)用户有向数据表插入数据的权限;
2)视图只引用表中部分字段,插入数据时只能是明确其应用的字段取值;
3)未引用的字段应具备下列条件之一: 允许空值;设有默认值;是标识字段;数据类型是timestamp或uniqueidentifer;
4)视图不能包含多个字段的组合
5)视图不能包含使用统计函数的结果;
6)视图不能包含DISTINCT或GROUP BY子句;
7)定义视图使用WITH CHECK OPTION,则插入数据应符合相应条件;
8)若视图引用多个表,一条INSERT语句只能同一个基表表中数据;
9)视图引用多个表时,无法用DELETE命令删除数据。
CREATE VIEW ygb_view AS SELECT * FROM 员工表 WHERE 员工表.性别=‘女’ with check option
然后,通过执行以下语句使用该视图向基表添加一条新的数据记录:
INSERT INTO ygb_view(姓名,性别,工资) values(‘李立平’,‘女’,2300)
更新数据记录 使用视图可以更新基表数据记录(注意使用INSERT时的限制同样适用)。
例子3:(1) update 项目_view set 项目负责人= ‘王大力’ where 项目负责人= ‘王立兵’
(2) update 项目_view set 结束日期= DATEADD(day,50,结束日期) where 客户名称=‘CCH公司’
删除数据记录 利用DELETE语句,使用视图删除记录,可以删除任何基表中的记录。
注意: 必须指定在视图中定义过的字段来删除记录;
视图引用多个表时,无法用DELETE命令删除数据。
例子4:delete ygb_view where 员工工资<1500