【SQL Server】华中农业大学空间数据库实验报告 实验六 视图

1.实验目的

  1. 通过课堂理论学习与实验课的实际操作,充分理解视图的相关概念,作用,以及特点,视图中定义的是对一个或多个基本表的查询语句,其本身并不保存数据,所有的数据都存储在数据库的表中,因此视图又称为虚拟表;
  2. 熟练掌握基本的SQL Server的视图的基本操作,包括创建视图、修改视图、删除视图、视图的数据查询、视图的管理和维护、通过视图更改基本表等,强化学生对视图的实际应用能力;
  3. 重点掌握创建视图与通过视图修改基本表中的数据,在此实验的基础上,正确理解视图与基本表之间的关系,同时通过实验进一步加深主键、外键、参照性关系等知识点的掌握程度。

2.实验内容

  1. 创建视图: 交互式创建视图View_S、交互式创建视图View_SCORE、T-SQL创建视图View_COURESE;
  2. 修改视图: 交互式删除视图字段、T-SQL增加视图字段;
  3. 通过视图修改数据库数据: 交互式通过视图修改基本表数据、视图执行INSERT语句,查看基本表变化、修改视图定义再执行INSERT语句,查看基本表变化、T-SQL对视图执行DELETE语句,查看基本表变化;
  4. 删除视图: 交互式删除视图、T-SQL删除视图;

3.实验步骤

3.1创建视图

1.交互式创建视图View_S

(1)展开数据库【jiaoxuedb】,右击【视图】选择【新建视图】,在弹出的参数表中选中我们希望创建视图的数据库表【STUDENT】,选中数据库表中的所有列:

(2)正确选择数据库表与数据库表的列后,在设计器下方会显示预显示的视图内容与创建视图的T-SQL语句的代码,可以参考用作学习,点击保存后输入视图名称:

2.交互式创建视图View_SSCORE

创建视图View_SSCORE,我们需要的数据库表有STUDENT、COURESE、SC中的Sname、Cname、Score的信息,因此需要我们在创建视图时导入三个数据库表/视图,并选中相应的数据列,点击保存后,输入视图名称即可完成创建视图;

多表联合创建视图的原理与多表连接基本相同,在创建过程中主键对其的影响十分之大,如果主键连接不够合理与正确,得到视图将会出现重复数据等等错误。

结果如下:

 

3.T-SQL创建视图View_COURESE

新建查询,输入代码如下所示,其代码含义为选中数据库jiaoxuedb,以数据库表【TEACHER】【COURESE】【TC】中的列【TNAME】【CNAME】,创建一个命名为VIEW_CTABLE的视图:

得到结果如下:

3.2修改视图

1.交互式删除视图字段

选中视图,右击选择【设计】,打开视图编辑器,删除特定字段可以在上半部分直接取消勾选,如果基本表与列过多,也可以在下半部分选中列右击后删除,删除操作因为过于直接且无法撤回,一般都是交互式方法要优于T-SQL语句方法:

2.T-SQL增加视图字段

新建查询,输入代码如下所示,虽然代码提示【VIEW_CTABLE】不存在,但代码可以执行,且结果正确:

得到结果如下所示:

3.3通过视图修改数据库数据

1.交互式通过视图修改基本表数据

交互式通过视图修改基本表数据,直接打开视图的【编辑前200行】,在视图中直接进行修改,保存后回到基本表之后即可发现基本表已经随着视图一起变化了:

2.视图执行INSERT语句,查看基本表变化

新建查询,输入代码如下,其代码语句与普通的插入语句相同,但因为视图是基本表的子集,仅插入TNAME,SEX,DEPT几个列属性,但执行过后却提示INSERT失败。

其根本原因在于如果希望通过更改视图更改基本表,输入的数据中又无Sno(学号即主键),INSERT语句是必然失败的,因为主键不允许为空值,而如果通过更改视图更改基本表,未输入数据的列会默认为空值,与主键的定义相矛盾,因此执行INSTER语句失败。

3.修改视图定义再执行INSERT语句,查看基本表变化

结合上述实验与分析,如果仍想要执行INSERT语句,需要修改视图定义使其含有主键,才可执行INSERT语句:

打开视图的设计器,在基本表中勾选主键【Sno】,保存后刷新即可在视图中看见主键已被添加至视图中;

新建查询,输入代码如下,与上述实验的代码相比主要是添加了主键的值;

此时返回视图与基本表可以看到INSERT语句插入的新行已经在数据库表中了,说明在重新定义视图后INSERT语句执行成功,且未输入值的属性都被赋值为空。

4.T-SQL对视图执行DELETE语句,查看基本表变化

新建查询,输入代码如下所示,其代码含义为在视图VIEW_S中删除Sno为S9的行,可以看到除视图以外,基本表也发生了改变,这也侧面说明了删除操作的简单粗暴性。

3.4删除视图

1.交互式删除视图

交互式删除视图,选择对应的数据库,打开【视图】,选择对应的视图后右键,找到【删除】选项即可删除:

2.T-SQL删除视图

新建查询,输入代码如下所示,其代码含义为删除名为View_CTABLE的视图:

4.课后习题

1.创建成绩视图SCORE_VIEW,包含:学号SNO、姓名SN、课程名CN、成绩Score

利用交互式方法,新建视图添加数据库表【STUDENT】【SCORE】【COURESE】,选择其中的Sno、Sname、Score、Cname;

得到结果如下:

2.创建一个计算机系学生名单视图S_VIEW,包含:学号SNO、姓名SN、性别SEX:

新建查询,利用T-SQL语句输入代码如下,其代码含义为选中数据库jiaoxuedb其中的表【STUDENT】,创建一个命名为S_VIEW的视图,将表【STUDENT】中DEPT的值为【计算机】的行的SNO、SN、SEX的值添加至视图中:

得到结果如下,符合我们的数据库表中的数据:

3.通过上面的视图SCORE_VIEW,修改学号为S4,课号为C2的成绩记录:

因为视图SCORE_VIEW中没有课号的列属性,首先我们需要为视图添加新的列,利用交互式修改视图属性的方法,得到结果如下:

新建查询,输入代码如下所示,查看结果后符合预期:

4.为视图S_VIEW增加一个年龄AGE字段:

利用交互式方法修改视图属性较为简单便捷,因此选择视图S_VIEW,右击设计,打开视图设计器勾选AGE,再次打开视图即可看见年龄AGE字段已被添加:

 

5.实验总结

5.1相关概念的区分

  1. 主键与索引的关系:简单来说:主键是一种特殊的索引,主键是索引,索引不一定是主键,索引可以是多列,主键只能是一列。因此创建主键后,系统会自动为我们生成聚簇索引;
  2. 主键与唯一索引的区别:主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。主键创建后一定会包含一个唯一性索引。除此之外,唯一性索引列允许空值,而主键列不允许为空值
  3. 聚簇索引与非聚簇索引的区别:二者首先并不是一种单独的索引类型,而是一种数据存储方式。聚簇索引直接指向存储的数据,而非聚簇索引(辅助索引)则直接指向聚簇索引的key值,这表示非聚簇索引访问数据需要二次查找,而聚簇索引访问则不需要。

5.2实验中的常见问题

  1. 创建索引时显示:无法对表创建多个聚簇索引:

此问题出现的根本原因为一个表只能存在一个聚集索引,创建主键会自动生成聚集索引,因此我们无法对已有主键的数据库表创建聚簇索引;

如果依然想要创建聚簇索引,我们需要首先删除对应数据库表的主键。

5.3实验心得

  1. 此次的实验内容相比第二次实验无论是理解还是操作难度都轻松不少,其原因在于无论是索引还是视图,作为数据库中较为常用的工具,实验的重点在于理解其概念、作用以及特点,就具体操作来说都是创建、修改删除等等我们之前进行反复练习的基础操作,因此本次实验过程中也未遇见过多实际操作问题;
  2. 随着学习的不断深入,我们可以明显感觉到实验对T-SQL语句的准确性的要求也在不断提高。在此次实验中,我就已经出现了虽然代码不显示报错,但是最终结果不符合预期的情况,例如:数据库表出现异常重复数据、T-SQL语句执行后使表中已有数据变为空值等等,常见原因多为表与表之间的连接错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/923988.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

javaweb-day01-html和css初识

html:超文本标记语言 CSS:层叠样式表 1.html实现新浪新闻页面 1.1 标题排版 效果图: 1.2 标题颜色样式 1.3 标签内颜色样式 1.4设置超链接 1.5 正文排版 1.6 页面布局–盒子 (1)盒子模型 (2)页面布局…

【Android】webview常用方法和使用

文章目录 前言一、常见用法二、基础属性webView的常用方法WebViewClient的常用方法WebChromeClient的常用方法WebSettings的相关方法 三、加载流程和事件回调四、webview和JS之间的互相调用总结 五、参考链接 前言 最近项目又用到了webview,在回顾复习一次webview相…

【微服务架构】Kubernetes与Docker在微服务架构中的最佳实践(详尽教程)

文章目录 什么是微服务架构Docker在微服务中的应用Docker基础Docker的核心组件 Docker在微服务中的优势 Kubernetes在微服务中的应用Kubernetes基础Kubernetes的核心组件 Kubernetes在微服务中的优势 Kubernetes与Docker的集成最佳实践容器化微服务服务发现与负载均衡自动化部署…

深入了解JDK动态代理

什么是JDK动态代理 (有动态代理,就有静态代理,参见:多线程03--静态代理模式_runnable接口静态代理模式-CSDN博客) JDK动态代理是Java提供的一种动态生成代理对象的机制,允许在运行时创建一个实现了指定接口…

C#基础56-60

56.字符数组x中存有任意一串字符;串中的所有小写字母改写成大写字母,如果是大写字母改为小写字母,其他字符不变。最后把已处理的字符串仍重新存入字符数组x中,最后调用函数把结果输出到控制台中。 57.求出100以上1000以内所有个位…

华为IPD流程管理体系L1至L5最佳实践-解读

该文档主要介绍了华为IPD流程管理体系,包括流程体系架构、流程框架实施方法、各业务流程框架示例以及相关案例等内容,旨在帮助企业建立高效、规范的流程管理体系,实现业务的持续优化和发展。具体内容如下: 1. 华为流程体系概述 -…

Edge浏览器保留数据,无损降级退回老版本+禁止更新教程(适用于Chrome)

3 个月前阿虚就已经写文章告警过大家,Chromium 内核的浏览器将在 127 以上版本开始限制仍在使用 Manifest V2 规范的扩展:https://mp.weixin.qq.com/s/v1gINxg5vMh86kdOOmqc6A 像是 IDM、油猴脚本管理器、uBblock 等扩展都会受到影响,后续将无…

DevOps引领数字化转型新趋势

DevOps帮助数字化转型 在数字化转型的大潮中,DevOps作为一种文化、运动和实践,已经成为推动企业快速适应市场变化、提高竞争力的关键因素。DevOps的核心在于打破开发(Development)和运维(Operations)之间的…

ctfshow

1,web21 Basic认证采用Base64加密方式,Base64解码字符串发现是 用户名:密码 的格式进行Base64编码。 密码shark63 2,web22 用 子域名扫描器 扫出flag.ctf.show拿到flag,但这个域名已经没了所以就直接交的官方提供的flag。 3,web23 这段PHP代码是一个简单…

从 0 到 1 掌握部署第一个 Web 应用到 Kubernetes 中

文章目录 前言构建一个 hello world web 应用项目结构项目核心文件启动项目 检查项目是否构建成功 容器化我们的应用编写 Dockerfile构建 docker 镜像推送 docker 镜像仓库 使用 labs.play-with-k8s.com 构建 Kubernetes 集群并部署应用构建 Kubernetes 集群环境编写部署文件 总…

数据结构与算法——1120——时间空间效率问题求边界值

目录 1、效率问题 1、时间复杂度 1、O(1) 2、O(n) 3、O(n) 或O(n*log2n)——n倍的log以2为底n的对数 例题 4、O(n) 2、空间复杂度 3、数组和链表 2、面试题之求边界值 题目 解答 (1)-i (2)~i (3&#x…

爬虫与反爬-Ja3指纹风控(Just a moment...)处理方案及参数说明

概述:本文将针对 Ja3 指纹检测风控进行处理,举例了一个案例并使用两种不同的破解方案进行突破,同时深入了解指纹间不同字符所代表的含义 指纹检测背景: 1、每一个设备、软件都有独属于自己的设备信息、版本号、加密算法、椭圆算…

【JUC-JMM】Java Memory Model Java内存模型

Java内存模型--JMM 一、JMM是什么?二、Happens-Before原则三、JMM有什么用? 一、JMM是什么? JMM,全拼Java Memory Model,翻译过来就是Java内存模型。 那么,我们不禁思索,Java内存模型有什么用&…

SpringAI:Java 开发的智能新利器

一、SpringAI 简介 随着人工智能技术的飞速发展,越来越多的开发者开始探索如何将 AI 能力集成到现有的应用中来提升产品的智能化水平。Spring AI 正是为 Java 开发者提供的一款强大的 AI 框架,使得这一集成过程变得前所未有的简单和高效。 本文将深入探…

在Excel中处理不规范的日期格式数据并判断格式是否正确

有一个Excel表,录入的日期格式很混乱,有些看着差不多,但实际多一个空格少一个字符很难发现,希望的理想格式是 1980-01-01,10位,即:“YYYY-mm-dd”,实际上数据表中这样的格式都有 19…

【我在CSDN成长】我的五周年创作纪念日

感叹 五年的时光匆匆而过, 像一阵风,拂过岁月的湖面, 泛起层层涟漪,又悄然离去。 曾经的欢笑与泪水, 那些奋斗的日夜, 如同电影般在脑海中放映, 却已成为遥远的回忆。 五年,说长不长…

Jmeter中的定时器

4)定时器 1--固定定时器 功能特点 固定延迟:在每个请求之间添加固定的延迟时间。精确控制:可以精确控制请求的发送频率。简单易用:配置简单,易于理解和使用。 配置步骤 添加固定定时器 右键点击需要添加定时器的请求…

BERT 详解

BERT简介 BERT(Bidirectional Encoder Representations from Transformers)是由 Google 在 2018 年提出的一种预训练语言模型。BERT 在自然语言处理(NLP)领域取得了重大突破,因为它能够有效地捕捉文本的上下文信息&am…

macos 14.0 Monoma 修改顶部菜单栏颜色

macos 14.0 设置暗色后顶部菜单栏还维持浅色,与整体不协调。 修改方式如下:

数据库-MySQL-Dynamic-Datasource源码解析

文章目录 前言一、简介二、整体流程三、核心解析四、总结 前言 多数据源的应用在日常项目中也是很常见的场景。 dynamic-datasource的功能,用起来的确很方便,只需要一个DS注解,加上一些简单的配置即可完成多数据源的切换。究竟是怎么做到的…