数往知来SQL SERVER 视图 触发器 <九>
SQL server学习_视图
1.视图
视图其实是一张虚拟表,他是一张表的部分数据或多张表的综合数据(视图就是把SQL语句封装起来)
可以看做是一个结果集,但是不是一个结果集
视图不具备存储数据的能力 (一旦源数据被修改删除,视图的结果集就会被修改删除,如果是一个结果集那么他封装起来里面的源数据被修改他就不会改变,所以说视图可以看做是一个结果集但是他又不是结果集)
视图在操作上和数据表没有区别,但两者的差异是其本质是不同的,数据表示实际存储记录的地方,然而视图并不保存任何记录,它存储的实际上是查询语句
我们可以将视图看做一个SQL语句的集合
使用的时候,会执行其中的SQL语句,得到一个结果集
-->视图的三大优点
1、筛选表中的行 (可以把多张表连接成一张表,然后再在这个视图结果集里对这些行筛选)
2、防止未经许可的用户访问敏感数据 (做成视图以后这个视图结果集里的数据可能来自多张表,那么给你一个视图表名你不可能访问到我的源数据)
3、降低数据库的复杂程度 (视图里存储的实际上是查询语句,那么把这些查询语句都放在视图里,使用的时候直接使用视图名,就简单很多了)
--》 视图的定义
create view vw_名字
as
一个结果集
-------------------------
alter view vw_join
as
select t1.sname,t1.sage,t1.sgender,t2.cname,t2.cDescription,t3.chinese,t3.english,t3.math from
TStudent as t1
inner join
TClass as t2
on t1.classId =t2.classId
inner join
TScore as t3
on t1.scoreId =t3.scoreId
select * from vw_join
章夏槐 9 0 Java学院 黑马班 69 132 99
符梦琪 50 0 .Net学院 基础班 148 85 50
韦天磊 74 1 .Net学院 就业班 14 33 134
璩伟祺 32 1 Java学院 就业班 144 43 121
滑烨磊 1 1 Java学院 就业班 73 130 103
柴傲柏 36 0 C++学院 就业班 98 8 57
梅天荷 14 0 Web学院 就业班 96 43 99
左雅彤 91 0 C++学院 就业班 88 80 44
SQL server_if-else、while、变量、try-catch
四、变量
1)变量的声明 关键字 declare @变量名 类型
declare @name nvarchar(10)
declare @age int
declare @gender nvarchar(1)
2)变量的赋值有两种方法
set @age=40
set @gender=0
select @name=sname,@age=sage, @gender=sgender from TStudent where studentid=10
select @name,@age,@gender --可以从表中查询数据并赋值,可以一次性给多个变量赋值
--》显示
select @name,@age,@gender --select可以以表的形式显示多个变量的值
print @name --print只可以显示一个变量的值,以文本消息的形式
局部变量:
局部变量必须以标记@作为前缀 ,如@Age int
局部变量:先声明,再赋值
全局变量(系统变量):
全局变量必须以标记@@作为前缀,如@@version
全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值
五、if-else
语法:
if
begin
end
else
begin
end
这里的begin和end就相当于C#里的两个大括号({})
六、while循环 跟C#里一样
大括号用begin和end替换
-->try -catch
语法:
begin try
SQL语句 ---这里和C#里一样,一旦遇到异常下面的语句将不再执行,直接跳到catch里面,执行catch力的语句
end try
begin catch
SQL语句
end catch
SQL server_触发器
八、常见的触发器
触发器的作用:自动化操作,减少了手动操作以及出错的几率(现实工作中用的比较少,因为想让他执行起来效率高很难)
一、DML触发器
Insert、delete、update(不支持select)
after触发器(for)、instead of触发器(不支持before触发器)
二、(*)DDL触发器
Create table、create database、alter、drop….
语法:
create trigger trig_触发器名 on 针对哪个表触发(表名)
after (这里用for也一样,两者都表示after触发器) | intead of delete、update、insert
as
begin
T-SQL语句
end
1、首先了解两张表 inserted,deletede
这两张表示当执行、插入、修改更新等操作时系统给创建的表,当操作结束之后会自动销毁,每执行依据t-sql语句就会触发一次触发器,不管你执行的语句删除、修改、插入的是多少条记录,
所以,要注意:这两张表里存的是你上一次最后执行的记录
-->inserted
当执行 insert 语句的时候会生成两条记录,一条会插入到你指定的表里,一条会放到系统创建的 inserted 表中
当执行update 语句的时候会先把原来的记录删除放到系统创建的deleted表中,然后生成两条记录,一条放到你指定的表里,一条放到insert表里
--》deleteed
当执行delete语句时,会把这条记录放到deleted表里
2、after 触发器
在语句执行操作之后触发
在语句执行完毕之后触发
按语句触发,而不是所影响的行数,无论所影响为多少行,只触发一次。
只能建立在常规表上,不能建立在视图和临时表上。(*)
可以递归触发,最高可达32级。
update(列),在update语句触发时,判断某列是否被更新,返回布尔值。
3、intead of触发器
用来替换原来的操作
用来替换原本的操作
不会递归触发
可以在约束被检查之前触发
可以建在表和视图上(*)
select * from TClass
--复制一张新表,用来备份
* into NewTClass from TClass
select * from NewTClass
--创建一个触发器,当删除TClass表中的数据时自动触发,把删除的数据备份到一张新标中
create trigger trig_NewTClass_delete on TClass
after delete --执行删除语句之后触发
as
begin
--一次插入多条记录,如果用values只可以查入一条,要是用户一次删除多条,那么values就不能把多条记录插入了
insert into NewTClass select cName,cDescription from deleted
end
delete
--删除触发器
drop trigger trig_NewTClass_delete
--instead触发器,当执行删除操作时,把删除操作替换成 打印 print '执行删除操作了'
create trigger trig_NewTClass_delete on TClass
instead of delete
as
begin
print '执行删除操作了'
end
数往知来SQL SERVER 视图 触发器 <九>的更多相关文章
- 11、SQL Server 视图、数据库快照
SQL Server 视图 什么是视图? 视图是一个虚拟的表,内容源于查询的结果集.只有当视图上建立了索引后,才会具体化. 视图可以筛选和处理数据,而不是直接访问基础表.如:创建一个视图,只展示源表中 ...
- 使用SQL Server视图的优缺点
SQL Server视图我们经常会用的到,下面就为您介绍使用SQL Server视图的优缺点,希望可以对您SQL Server视图有更多的了解. 在程序设计的时候必须先了解视图的优缺点,这样可以扬长避 ...
- (4.22)sql server视图/索引视图概念
(4.22)sql server视图 关键词:sql server视图.索引视图 SQL Server视图是由SQL语句组成的逻辑数据库对象.它也可以称为由SQL语句组成的虚拟表,该SQL语句可能包含 ...
- CodeSmith生成SQL Server视图的实体类脚本/对应的生成模板
C#生成sql视图的实体类 using System;using System.Text;using CodeSmith.Engine;using SchemaExplorer;using Syste ...
- SQL SERVER视图对查询效率的提高
SQL SERVER视图不仅可以实现许多我们需要的功能,而且对于SQL SERVER查询效率的提高也有帮助,下面一起来了解一下. 有两张数据表:A和B,其中A的记录为2万条左右,而B中的数据为200万 ...
- SQL Server:触发器详解
1. 概述 触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活. 所以触发器可以用来实现对表实施复杂的完整性约束. 2. 触发器的分类 SQL S ...
- SQL Server 视图
视图实际上就是一个存储查询,重点是是可以混合和匹配来自基本表(或者其他视图)的数据,从而创建在很多方面像另一个基表那样起作用的对象.可以创建一个简单的查询,仅仅从一个表中选择几列,而忽略其他列:或者也 ...
- SQL SERVER TRIGGER 触发器
1.触发器简介 触发器是一种特殊的存储过程,它的执行不是由程序调用,也不是手动执行,而是由事件来触发.触发器是当对某一个表进行操作.例如:update.insert.delete这些操作的时候,系统会 ...
- sql server中触发器
触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 触发器对表进行插入.更新.删 ...
随机推荐
- poj -2010 Moo University - Financial Aid (优先队列)
http://poj.org/problem?id=2010 "Moo U"大学有一种非常严格的入学考试(CSAT) ,每头小牛都会有一个得分.然而,"Moo U&quo ...
- sdut2169Sequence(dp)
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2169 感觉是有递归思想的 dp[j]表示从1到 ...
- linux 多处理器概念
Linux 提出了 Multi-Processing 的概念,它的调度器可以将操作系统的线程均分到各个核(或硬件线程)上去执行,以此达到并行计算的目的,从而也可以极大地提高系统的性能. 实现计数器 1 ...
- [转]JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
首先这是现在最基本的分层方式,结合了SSH架构.modle层就是对应的数据库表的实体类.Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操 ...
- 51nod1394 差和问题
我只会用线段树写...不喜欢树状数组..其实跑的也不算慢?然后各种*的时候忘了longlong一直WA...药丸! 而且我不怎么会用map离散化...那么就sort+unique #include&l ...
- WEBUS2.0 In Action - 搜索操作指南 - (3)
上一篇:WEBUS2.0 In Action - 搜索操作指南(2) | 下一篇:WEBUS2.0 In Action - 搜索操作指南(4) 3. 评分机制 (Webus.Search.IHitSc ...
- HDU3232 Crossing rivers
思路:这题关键一点就是根据题目的描述和测试数据得到启发,船都是 从对岸划过来的.心中有具体场景,就可以很简单了. #include<cstdio> int main() { ; ; whi ...
- mysql添加索引
1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索 ...
- Python使用os.listdir()函数来得目录内容的介绍
Python编程语言是计算机语言中常用的语言,以下的文章就是介绍在Python编程语言中使用os.listdir()函数来获得目录中的相关内容的介绍,如果你对其相关的实际操作有兴趣的话,你就可以观看以 ...
- 平板与PC的文件交互及播放
发现在kindle上可以用ES开个浏览器,把FTP打开,实现文件的互访,之前还弄了一个大圈下了一大堆的垃圾软件, 而看电脑上的流媒体的话,则可以用dice播放器add一下samba就可以了