数据库三:视图

文章介绍了数据库中的视图概念,包括如何定义、查询和修改视图,强调了视图在数据查询和安全性方面的作用。同时,讨论了触发器的功能,如强制引用完整性、级联修改和自定义错误消息,以及DDL和DML触发器的类型。此外,还提到了存储过程的优势,如组件式编程、执行速度和安全性。
摘要由CSDN通过智能技术生成

1.视图概念

视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,是基本表的部分行和列数据的组合。视图是一个虚表,数据库中只存放视图的定义,而不存放视图包含的数据,这些数据仍存放在原来的基本表中。但基本表中的数据改变,视图中查询出的数据也会随之改变。

2.定义视图

select view 视图名(列名) as select 语句
注意:

  1. 在定义视图时要么指定全部视图列,要么全部省略不写,不能只写视图的部分属性列。以下情况必须全部指明:
  • select语句中的查询列不是单纯的属性名,而是函数或表达式等无列名的列
  • 多表连接时选出了几个同名列作为视图的字段
  • 需要在视图中为列选用新的更适合的列名
  1. 定义视图的查询语句中通常不包含order by和distinct子句,这些语句可放在通过视图查询数据的语句中。
2.1定义单源表视图

单源表的行列子集视图指视图的数据取自一个基本表的部分行、列,这样的视图行列与基本表行列对应。
单源表视图可以对数据进行查询和修改操作。

create view is_student as select sno,sname,sage from student where sdept =‘信息系’
2.2定义多源表视图
#建立查询信息系选了c001号课程的学生的视图 列出学号 姓名和年龄
create view v_is_s1(sno,sname,grade) as select student.sno,sname,sage from student join sc on student.sno=sc.sno where sdept =‘信息系’ and sc.cno=‘c001’
2.3在已有视图上定义新视图
create view v_is_s2 as select sno,sname,grade from v_is_s1 where grade >=90
2.4定义带表达式的视图

表中只存放基本数据,而基本数据经过各种计算派生出的数据一般是不存储的。但由于视图中的数据并不实际存储,所以定义视图时可根据需要设置一些派生属性,在这些派生属性中保存经过计算的值。这些派生属性由于在基本表中并不实际存在,称为虚拟列。

create view v_birthyear(sno,sname,birthyear) as select sno,sname,2015-sage from student 
2.5含分组统计信息的视图

含分组统计信息的视图是指定义视图的查询语句中含有group by子句,只能用于查询,不能用于修改数据。

create view s_g(sno,avggrade) as select sno,avg(grade) from sc group by sno

3.通过视图查询数据

通过视图查询数据同通过基本表查询数据一样。

select sno,sname,sage from is_student where sage <= 20

4.修改和删除视图

修改视图

#修改2.5含分组统计信息的视图 用它统计每个学生的考试平均成绩和修课总门数
alter view s_g(sno,avggrade,count_cno) as select sno,avg(grade),count(*) from sc group by sno

删除视图

drop view is_student

4.视图的作用

  • 简化数据查询你语句
  • 使用户能从多角度看待同一数据
  • 提高了数据的安全性
  • 提供了一定程度的逻辑独立性

5.触发器

触发器就是对某一个表的一定操作,触发某种条件,从而执行的一段程序。

触发器的作用
触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂参照完整性和数据的一致性,它能够对数据库中的相关表进行级联修改,提高比CHECK约束更复杂的的数据完整性,并自定义错误消息。触发器的主要作用主要有以下接个方面:

  1. 强制数据库间的引用完整性
  2. 级联修改数据库中所有相关的表,自动触发其它与之相关的操作
  3. 跟踪变化,撤销或回滚违法操作,防止非法修改数据
  4. 返回自定义的错误消息,约束无法返回信息,而触发器可以
  5. 触发器可以调用更多的存储过程

触发器的优点
6. 触发器是自动的。当对表中的数据做了任何修改之后立即被激活。
7. 触发器可以通过数据库中的相关表进行层叠修改。
8. 触发器可以强制限制。这些限制比用CHECK约束所定义的更复杂。与CHECK约束不同的是,触发器可以引用其他表中的列。

触发器的分类
SQLServer包括三种常规类型的触发器:DML触发器(数据操作语言)、DDL触发器(数据定义语言)和登录触发器。

DML触发器是一些附加在特定表或视图上的操作代码,当数据库服务器中发生数据操作语言事件时执行这些操作。
SqlServer中的DML触发器有三种:

  • insert触发器:表中插入数据时被触发;
  • delete触发器:从表中删除数据时被触发;
  • update触发器:修改表中数据时被触发。
    DML触发场景:
  • 通过数据库中的相关表实现级联更改;
  • 防止恶意或者错误的insert、update和delete操作,并强制执行check约束定义的限制更为复杂的其他限制。
  • 评估数据修改前后表的状态,并根据该差异才去措施。

DDL触发器是当服务器或者数据库中发生数据定义语言(主要是以create,drop,alter开头的语句)事件时被激活使用,使用DDL触发器可以防止对数据架构进行的某些更改或记录数据中的更改或事件操作。

create trigger student_trig_insert on student
after insert
as
    begin
        if object_id(‘stu_num’,’U’) is null
             create table stu_num(stuCount int);
        delcare @rowNum int;
        select @rowNum=count(*) from student
        if not exists (select * from stu_num)
             begin
                 insert into stu_num values(0);
             end
        else
             begin
                 update stu_num set stuCount=@rowNum;
             end
    end                

6.存储过程

存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。
存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。
存储过程的优点

  • 存储过程允许标准组件式编程
    存储过程创建后可以在程序中被多次调用执行,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,但对应用程序源代码却毫无影响,从而极大的提高了程序的可移植性。
  • 存储过程能够实现较快的执行速度
    如果某一操作包含大量的T-SQL语句代码,分别被多次执行,那么存储过程要比批处理的执行速度快得多。因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的存储计划。而批处理的T-SQL语句每次运行都需要预编译和优化,所以速度就要慢一些。
  • 存储过程减轻网络流量
    对于同一个针对数据库对象的操作,如果这一操作所涉及到的T-SQL语句被组织成一存储过程,那么当在客户机上调用该存储过程时,网络中传递的只是该调用语句,否则将会是多条SQL语句。从而减轻了网络流量,降低了网络负载。
  • 存储过程可被作为一种安全机制来充分利用
    系统管理员可以对执行的某一个存储过程进行权限限制,从而能够实现对某些数据访问的限制,避免非授权用户对数据的访问,保证数据的安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值