本文详述了一次关于视图操作的数据库系统实验,涵盖创建、修改、查询、插入、更新和删除视图的实例,以及讨论了视图不可更新的情况和原因。实验使用了SQL Server 2008,在HRM数据库上定义了多种类型的视图,包括投影、选择、连接和嵌套查询等操作。此外,还探讨了视图在数据库保护和简化用户操作中的作用。
摘要由CSDN通过智能技术生成
《数据库系统 》 实验报告
实验名称 视图的定义与操作 实验地点 实验楼423 实验日期
一、实验目的及要求
1、掌握创建视图的SQL语句的用法
2、掌握修改视图的方法
3、熟悉视图更新与基本表更新的区别与联系
4、认识视图的作用
二、实验环境
Windows10+SQL Sever 2008
三、实验内容
-
对应HRM 数据库,参照前面实验中完成的查询,按如下要求自行设计视图:
(1) 基于单个表按投影操作定义视图。
举例:定义一个视图用以查看所有员工的编号、姓名和出生日期。
create view Departments_View
as select *
from Departments
(2) 基于单个表按选择操作定义视图。
举例:定义一个满足sex=‟true‟的员工的所有信息的视图。
create view Employee_View
as select *
from Employee
where Sex = ‘true’
(3) 基于单个表按选择和投影操作定义视图。
举例:定义一个视图用以查看部门号码为„2‟的所有员工的姓名、电话和邮件地址。
create view Employee_Viewl
as select Name,PhoneNumber,EmailAdress
from Employee
where DepartmentID = ‘2’
(4) 基于多个表根据连接操作定义视图。
举例:定义一个视图用以查看所有员工的姓名、部门名及工资。
create view Employee_Departments_Salary_View(Name,Department,Salary)
as select Employee.Name,Departments.DepartmentName,Salary.Income-Salary.OutCome
from Employee left join Departments on Employee.DepartmentID=Departments.DepartmentID
left join Salary on Employee.EmployeeID=Salary.EmployeeID
(5) 基于多个表根据嵌套查询定义视图。
举例:定义一个比所有财务部的雇员工资都高的雇员的信息的视图
create view Employee_Salary_View
as select *
from Employee
where EmployeeID in(
select EmployeeID from Salary where Income>all(
select Income from Salary where EmployeeID in(
select EmployeeID from Employee where DepartmentID=(
select DepartmentID from Departments where DepartmentName=‘财务部’
)
)
)
)
(6) 定义含有虚字段(即基本表中原本不存在的字段)的视图。
举例:定义一个视图用以查看所有雇员的编号、姓名、年龄。
create view Ee(mployeeID,Name,Age)
as select EmployeeID,Name,DATEDIFF(YEAR,Birthday,GETDATE())
from Employee
2. 分别在定义的视图上进行查询、插入、更新和删除操作,分情况(查询、更新)讨
论哪些操作可以成功完成,哪些不能成功完成,并分析原因。
insert into Employee_Departments_Salary_View
values(‘张三’,‘财务部’,‘2000’)
select EmployeeID from Employee_View
update Ee
set Aqe=‘40’
where Name =‘李勇’
delete from Departments_View
where DepartmentID=‘4’
delete from Employee_Salary_View
where Name=‘王军’
四、实验总结
通过本次实验,有了以下了解:
1.对视图的学习更加深入。一开始学习视图的时候,由于这块内容学的快,学的也不扎实。这次从视图的创建,插入,修改,查询以及删除都对他有了详细的认识。
2.这次实验让我对视图的有关语句的巩固学习了一下,加强了我的实践能力,视图能够简化用户的操作,视图可以作为虚表进行操作,加强了对原来的表的保护作用,使得我们对数据库做其他操作奠定基础,保护了数据。
问题:对视图或函数不可更新,因为修改会影响多个基表
解释:对视图insert,update,如果影响的字段只属于一个基表的就可以
问题:对视图的更新或插入失败,因其包含派生域或常量域
解决:重新创建一个表,结构内容都一样解释:因为所创建的视图对其属性值进行了计算的其他形式上的改变,而对视图的更改最终表现为对表的更改,而表中不存在视图的某一属性,或属性的性质不相同,则无法更改,这是一种视图机制
使用 SSMS 和 Transact-
SQL
语句 CREATE VIEW 创建
视图
使用 Transact-
SQL
语句 ALTER VIEW
修改
视图
学习删除
视图
的 Transact-
SQL
语句 DROP VIEW 的用法
三、...
原因:
视图
view不允许
修改
。
解决:重新创建一个相同结构内容的表。
解释:因为所创建的
视图
对其属性值进行了计算的其他形式上的改变,而对
视图
的更改最终表现为对表的更改而表中不存在
视图
的某一属性,或属性的性质不相同,则无法更改,这是一种
视图
机制。
转载于:https://www.cnblogs.com/claricre/p/8927727.html...
在很多的时候,一个良好的数据库设计
会
因为后期的需求变化或其他原因,需要在当前表进行字段的扩展,这个是系统本身的设计问题,为了达到系统的功能需求,
不可
避免需要更改数据库的设计。
但是有时候我们做系统集成,要与其他系统做接口的时候,如果需要更改表的设计,我认为就不是一个很好的设计思路了,做为这种需求,我们可以通过设计对应表来满足接口的需求。
还有一种方案就是在不改变的原表,将原表改名...