【SQL server】视图和索引的创建与管理

news2024/12/24 22:07:07

本实验数据来源课参照一下本专栏文章:

【SQL server】进行简单查询分组、连接查询子查询和汇总(含teaching数据库创建及实验拓展)_Deep-sea shark的博客-CSDN博客_sql 分组汇总

在SSMS中创建视图

视图是一张虚表,数据库中只存储视图的定义,而不存储视图对应的数据(除非是索引视图)。

视图可作为一种安全机制,通过使用视图可以集中、简化和定制用户的数据库显示,用户可以通过视图访问数据,而不被授予直接访问视图基础表的权限。

实验7-1在SSMS中创建视图

实验要求

在“teaching”数据库创建所有在年龄大于22岁(含22岁)的所有男生的学生信息视图,视图中

只显示学号、姓名、性别和年龄,视图命名为view_s。

实验步骤

(1)在“对象资源管理器”中展开“teaching”数据库,展开“视图”选项。右键单击“视图”选

项,在弹出的快捷菜单中选择“新建视图”菜单,此时弹出“添加表”对话框,选择“表”选项卡中的student表,然后单击“添加”按钮,就可以将其添加到视图设计界面中了。

(2)添加表后,单击“关闭”按钮,进入视图设计器。该界面分为四个子窗口,最上面的子窗口显

示添加的表结构,读者可以通过勾选列名前的复选框让某列显示在创建的视图中,此处选择sno,sname,ssex和sage四列。第二个子窗口显示用户选择的列、列的别名、表、是否输出、排序类型、排序顺序、筛选器等属性。通过设置第二个子窗口,可以进一步设置视图显示的内容,对显示内容进行筛选。根据实验要求,在第二个窗口“筛选器”中把ssex设置为“=男”,把sage设置为“>=22”。

使用T-SQL语句创建视图

实验要求

1.在“teaching”数据库创建“S_C_SC_XJ”视图,包括“信息计算”专业的学生的学号、姓名,和他们选修的课程号、课程名和成绩。

2.创建male_view视图,用于存放所有男生的学生信息,同时使用WITH CHECK OPTION选项。

实验步骤

在查询命令窗口中输入以下的T-SQL语句:

use teaching
go
create view S_C_SC_XJ
as
select student.sno,sname,COURSE.cno,cname,score
from student,sc,COURSE
where student.sno=sc.sno and sc.cno=COURSE.cno
go

3.单击单击(分析)按钮,分析有无语法错误,当在结果窗口中显示“命令已成功完成”时,表示创建视图的T-SQL语句没有语法错误。否则,如有语法错误,则要修改创建视图的T-SQL语句。当没有语法错误时,单击执行按钮,完成视图的创建。

4.在查询命令窗口中输入以下T-SQL语句,并执行。

create view male_view2  
as
select sno,sname,ssex,sage,en_time,specialty,grade
from student where ssex='男'
with check option

分析with check option的作用:

暂时不分析,自主完成。

使用T-SQL语句修改视图

实验要求

在“teaching”数据库,修改“S_C_SC_XJ”视图,要求包括每个学生的学号、姓名和选修的课程总数。

实验步骤

1.打开SSMS,单击“新建查询”按钮,打开查询命令窗口。

2.在查询命令窗口中输入以下T-SQL语句,并执行。

use teaching
go
alter view S_C_SC_XJ
as
    select student.sno,sname,count(sc.cno) as 课程总数
    from student,sc
    where student.sno=sc.sno
    group by student.sno,sname
go

执行结束后,通过查看并执行视图,可以明显看到视图发生了变化,与之前创建的视图明显的不同。

使用视图

实验要求

1.在查询窗口中查询View_1视图,统计男生的平均年龄。

2.分别通过male_view视图插入一条男生信息和一条女生信息。

实验步骤

1.在查询命令窗口中输入以下T-SQL语句,并执行。

USE teaching
SELECT avg(sage) as 平均年龄
FROM view_s
GO

可以看到,在View_1视图中男生的平均年龄为22岁。

2.在查询命令窗口中输入以下T-SQL语句,并执行。

INSERT INTO male_view VALUES ('20195301', '张三', '男', 20)
--该语句能顺利执行。
INSERT INTO male_view VALUES ('20195312', '李思', '女',17)
--请读者注意该语句将不能执行。

分析原因可知筛选器中的限制条件会限制视图的插入功能,必须满足要求才能插入成功。

消息 550,级别 16,状态 1,第 34 行
试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束。
语句已终止。

这个报错主要意思就是,性别不符合约束条件。

删除视图

实验要求

1.在SSMS删除视图view_s

2.在查询窗口中执行T-SQL语句删除视图S_C_SC_XJ

实验步骤

1.在SSMS的“对象资源管理器”选中要删除的视图,单击右键,在弹出菜单中选择“删除”命令,进入“删除对象”对话框,单击“确定”按钮就能删除视图。

2.在查询命令窗口中输入以下T-SQL语句,并执行。

        USE teaching
        GO 
        DROP VIEW S_C_SC_XJ
        GO 

执行完成后刷新视图可以看见S_C_SC_XJ已经不见了,说明此时删除成功了。

在SSMS中创建带索引的视图

实验要求

在“teaching”数据库为“student”表创建在sname上的非聚集不唯一的索引。

实验步骤

1.启动SSMS,在“对象资源管理器”面板中,展开teaching数据库中的student表前面的“+”号,选中“索引”选项右击,在弹出的快捷菜单中选择“新建索引”命令。

2.选择“新建索引”命令,选择“非聚集索引”,进入“新建索引”对话框。由于student表中已经建立主键,自动建立了聚集索引,一个表只能有一个聚集索引,因此这里只能建非聚集索引。

3.在“新建索引”对话框中的“常规”选择页中可以创建索引,在“索引名称”文本框中输入索引名称,确定是否选择“唯一”复选框等。例如输入“索引名称”为“index_sname”。

4.通过选择索引设置按钮,可以为新建的索引添加、删除、移动索引列。例如,选择“添加”按钮,进入“添加索引列”窗口。选中“sname”列前的多选按钮,单击“确定”按钮即可添加一个按“sname”列升序排序的非聚集索引。再选择“确定”按钮,索引创建完成。

5.索引创建完成后,在SSMS的“对象资源管理器”面板中,选择创建了索引的表(student表),展开student表的“索引”选顶前面的“+”号,就会出现新建的索引“index_sname”.

使用T-SQL创建视图

实验要求

在“teaching”数据库为“student”表,根据姓名sname列和专业specialty创建一个名为index_sname_specialty的唯一索引,要求姓名升序排序,专业降序排序。

实验步骤

1)打开SSMS,单击“新建查询”按钮,打开查询命令窗口。

  1. 在查询命令窗口中输入以下T-SQL语句,并执行。

use teaching
go --nonclustered表示非聚集的
create unique nonclustered index index_name_specialty
on student(sname asc,sage desc)
go

创建索引视图。

实验要求

创建一个“female_view”视图,该视图用于显示女生的学生信息,并为该视图按“sno”升序创建一个具有唯一性的聚集索引。

实验步骤

1.创建视图,在查询命令窗口中输入以下T-SQL语句,并执行。

USE teaching 
GO
CREATE VIEW female_view
WITH schemabinding --模式绑定
AS
SELECT sno,sname,ssex,specialty FROM dbo.student
WHERE ssex='女'

2.创建索引,在查询命令窗口中输入以下T-SQL语句,并执行。

CREATE UNIQUE CLUSTERED INDEX index_female ON female_view(sno)

查看索引信息

使用T_SQL语句查看索引信息

在查询命令窗口中输入以下T-SQL语句,使用系统存储过程sp_helpindex,并执行。

USE teaching
GO
EXEC  sp_helpindex  student
或使用系统存储过程sp_help,
USE teaching
GO
EXEC sp_help student

删除索引

使用T-SQL语句删除“student”表中的“Index_sname”索引

在查询命令窗口中输入以下T-SQL语句,并执行。

USE teaching
DROP  INDEX student.Index_sname
GO


使用T-SQL语句创建触发器

在查询命令窗口中输入以下T-SQL语句并执行,将在student表上创建DML触发器NO_UP_S,禁止修改student表的数据。

use teaching
go
create trigger NO_UP_S on student
for update
as 
    print '禁止修改student表!'
    rollback
go

验证触发器,在查询窗口中输入修改sc表的语句:

update student
set sage=20
where sno='20190211'

由于此时发生了UPDATE事件,自动触发NO_UP_S触发器。触发器执行后,查询窗口的消息栏将显示触发器消息。

在查询命令窗口中输入以下T-SQL语句并执行,为course表中创建DML触发器C_NO_UP_CNOCNAME,禁止修改课程号cno和课程名cname字段。

use teaching 
go 
create trigger C_NO_UP_CNOCNAME on COURSE
for update
as    
    if update(cno) or update(cname)
    begin
        print '亲,不能修改课程号和课程名哦!'
        rollback
    end
go

在查询命令窗口中输入以下T-SQL语句并执行,为course表创建一个DML触发器C_XS,在插入和更新数据时自动显示提示信息。

use teaching
go 
create trigger C_XS on COURSE
after insert,update
as    
    print'你正在给course表插入或更新数据!'
go

在查询命令窗口中输入以下T-SQL语句并执行,为course表创建一个DML触发器C_PRINT,在插入和修改数据时,都会自动显示所有学生的信息。

use teaching
go
create trigger C_PRINT on COURESE
for insert,update
as 
    select * from COURSE
go

在查询命令窗口中输入以下T-SQL语句并执行,在学生表course上创建一个DELETE类型的触发器C_DEL_COU,删除数据时显示删除记录的个数。

use teaching
go
create trigger C_DEL_COU on COURSE
for delete 
as 
    declare @count varchar(50)
    select  @count=str(@@rowcount)+'个课程被删除'
    select  @count
return

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于git仓库的一些使用

配置多个ssh-key 1.生成不同的key名 如github key ssh-keygen -t rsa -C "exampleemail.com" -f ~/.ssh/github_id-rsa如gitlab key ssh-keygen -t rsa -C "examlpe企业邮箱.com" -f ~/.ssh/gitlab_id-rsa创建完成后的 macbookMacBookProdeMacBook-Pr…

STL——容器适配器、deque

一、容器适配器 1.适配器 适配器是一种设计模式(设计模式是一套被反复使用的、多数人所知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。 2.STL标准库中stack和queue的底层结构 stack…

数据结构与算法(Java版) | 就让我们来看看几个实际编程中遇到的问题吧!

上一讲,我给大家简单介绍了一下数据结构,以及数据结构与算法之间的关系,照理来说,接下来我就应该要给大家详细介绍线性结构和非线性结构了,但是在此之前,我决定还是先带着大家看几个实际编程中遇到的问题&a…

UE4 编写着色器以及各种宏的理解

参考链接:如何为 UE4 添加全局着色器(Global Shaders) - Unreal Enginehttps://docs.unrealengine.com/5.1/zh-CN/adding-global-shaders-to-unreal-engine/如何为 UE4 添加全局着色器(Global Shaders) - Unreal Engin…

睡眠影响寿命,这几个睡眠习惯赶紧改掉!

我们知道,现在睡眠不足已经成为普遍问题,但你知道睡眠的时长会影响寿命吗?熬夜对身体不好,已是老生常谈。但睡得过早,也可能影响寿命!2021年《睡眠医学》杂志一项针对21个国家11万名参与者的研究中发现&…

重生之我是赏金猎人-SRC漏洞挖掘(十)-某大厂从废弃sso登陆口到多思路fuzz获取各地高管信息

0x01 前言 https://github.com/J0o1ey/BountyHunterInChina 欢迎亲们点个star 作者Catm78sec 前期通过灯塔 ffuf oneforall 等工具组合进行子域名收集,得到目标站点,漏洞挖掘中多次踩坑成功get腾讯某后台 0x02 渗透日常——单点登录 目标URL&…

【vcpkg】cpprestsdk之64位编译链接及踩坑

▒ 目录 ▒🛫 问题描述1️⃣ 多版本vs报错指定VS路径2️⃣ error LNK2001: 问题排查通过IDA打开lib文件,确认导出内容查看源码增加参数--editable,重新编译3️⃣ error LNK2001: 外部符号__imp_?close_...去除__imp_🛬 结论vcpkg…

浅谈估值模型:从Grinold Kroner(GK)模型看投资的本质

摘要及声明 1:本文主要介绍Grinold Kroner(GK)模型的运用,并以上证指数为例实现一个GK模型; 2:本文主要为理念的讲解,模型也是笔者自建,文中假设与观点是基于笔者对模型及数据的一孔之见,若有…

buffer和cache的区别

一,计算机硬件组成 计算机硬件组成:CPU,存储器,输入输出设备(I/O),其他(主板,电源等) CPU:运算器,控制器 存储器:内部存储…

蓝桥云课-声网编程赛(声网编程竞赛7月专场)题解

比赛题目快速链接:https://www.lanqiao.cn/contests/lqENT02/challenges/ 让时钟转起来(考点:css:transform) // index.js function main() {// 题解前理解一个东西:// 时针每过一小时,转30 原…

博客等级说明

CSDN 博客等级是按照用户的博客积分数量进行的设定,为 Lv1 至 Lv10 共 10 个等级,不同的等级创作者可以享受到不同的权益待遇。例如,皮肤奖励、自定义域名、客服优先处理、自定义文章标签等特权。您需要提高博客积分进一步提升等级&#xff0…

矩阵理论复习(十二)

已知方阵A的不变因子: 求谱半径求矩阵级数判断矩阵幂级数的收敛性 若矩阵B的某个算子范数小于1,则I-B可逆。 矩阵分析 任何相容矩阵范数都存在与之相容的向量范数。 盖尔圆盘定理一的证明 椭圆范数的证明 若||.||是Cm上的向量范数,A为…

单元测试工具——JUnit的使用

⭐️前言⭐️ 本篇文章主要介绍单元测试工具JUnit的使用。 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言 🍉博客中涉及源码…

C++11--lambda表达式

目录 lambda表达式的概念 lambda表达式语法 lambda表达式的书写格式 捕捉列表 参数列表 mutable 返回值类型 函数体 lambda表达式交换两个数 函数对象与lambda表达式 lambda表达式的概念 lambda表达式是一个匿名函数 它能让代码更加地简洁 提高了代码可读性 首先定义…

2021年欧空局10米土地覆盖数据(分省/分市)

土地覆盖数据是我们平时最常用的地理数据之一,土地覆盖数据的来源也有很多种,之前我们介绍共过两个的30米精度的土地覆盖数据,分别为GlobeLand30土地覆盖数据和CLCD土地覆盖数据,(可查看之前推送的文章)&am…

佳能镜头EOS系统EF协议逆向工程(三)解码算法

目录 数据结构 解码算法 解码效果 这篇文章基于上两篇文章继续, 佳能镜头EOS系统EF协议逆向工程(一)转接环电路设计_佳能ef自动对焦协议_岬淢箫声的博客-CSDN博客本文属于专栏——工业相机。此专栏首先提供我人工翻译的法语文档部分&…

Python解题 - CSDN周赛第29期 - 争抢糖豆

本期问哥是志在必得,这本算法书我已经觊觎许久,而之前两次因为种种原因未能如愿。因此,问哥这几天花了不少时间,把所有之前在每日一练做过的题目重新梳理了一遍。苦心人,天不负,感谢官方大大! 第…

ChatGPT 人工智能革命从实验室走入公众生活

11 月底,人工智能研究实验室OpenAI 发布了 ChatGPT 聊天机器人首个测试版本,这是一款基于人工智能的新型聊天机器人,可以与人类进行对话,经过测试后,新款机器人便踏上了社交网站之旅,尤其是在推特平台上&am…

机器学习+西瓜书笔记第2章【贝叶斯分类器】

机器学习笔记第2章【贝叶斯分类器】一、贝叶斯决策论1.相关知识补充2.生成模型与判别模型贝叶斯公式: 实际上,分母为全概率公式,分子为联合概率。在机器学习中,更常见的形式为 贝叶斯公式的作用在于将P(B|A)的估计转化为估计P(A…

做一个短视频应用,如何选择服务器配置?

大家好我是明杰,最近听说了“两微一抖”这个词。很容易联想到,“两微”指的是微信和微博,“一抖”指的是抖音,它描述的是今年开始互联网行业呈现的一种新的变化。抖音奇迹般地杀出重围,与微博、微信一起造就了流量市场“三权分立”的现象。抖音能与微信、微博齐名,与…