视图: 视图是从一个或多个表或其他视图中导出的表。
视图的优点:
1). 为用户集中数据,简化用户的数据查询和处理。
2). 简化操作,屏蔽了数据库的复杂性。
3). 重新定制数据,使数据便于共享。
4). 合并分割数据,便于数据输出到应用程序中。
5). 简化用户权限的管理,增加安全性。
1.创建视图
Book(BookID,BookName,TypeID,AuthorID,…),BookType(TypeID,TypeName),创建一个视图,查询每本书的书名和图书类型。
CREATE VIEW VIEW_BOOK_INFO(BookID,BookName,BookType)/*指定视图中包括的基本表的列*/
AS
SELECT BookID,BookName,TypeName
FROM Book, BookType
WHERE Book.TypeID = BookType.TypeID
语句执行后可以看到视图下看到 dbo.VIEW_BOOK_INFO 表示视图创建成功。
2.查询视图
视图创建成功后就可以像查询表一样查询视图了。
SELECT * FROM VIEW_BOOK_INFO
SELECT * FROM VIEW_BOOK_INFO
WHERE BookName LIKE 'C语言%'
3.更新视图
UPDATE VIEW_BOOK_INFO
SET BookName = 'C#程序设计'
WHERE BookID = 2
SELECT * FROM VIEW_BOOK_INFO
查看原表Book会发现表中BookID=2的BookName变成了“C#程序设计”。但并不是所有的数据都可以通过视图来更新。要想视图表修改基本表的数据,要满足以下条件:
- 任何修改(包括UPDATE,INSERT,DELETE语句)都只能引用一个基本表的列。
- 在视图函数中修改的列必须直接引用表列中的基础数据。
- 被修改的列不受GROUP BY、TOP、HAVING和DISTINCT子句的影响。
4.修改视图定义
ALTER VIEW VIEW_BOOK_INFO(BookID,BookName)
AS
SELECT BookID,BookName
FROM Book, BookType
WHERE Book.TypeID = BookType.TypeID
虽然视图和表从查询结果看差不多,但修改视图定义与修改基本表结构不一样。修改视图定义并不会修改基本表的结构。