数往知来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中触发器
触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 触发器对表进行插入.更新.删 ...
随机推荐
- Database File Management ->> Shrink Data File
今天在开发环境遇到了一个问题,我们发现服务器上的硬盘空间满了,查看了下发现这个盘存放的数据库文件应该是来源一个并非很大的库才对.检查之后发现这个数据库下的某个数据文件占了盘符下70%的空间,而大部分数 ...
- Data Flow ->> Look up & Merge Join
Look up: Look up组件做的事情和SQL SERVER中的inner和outer hash join差不多. 但是look up每次只能有两张表参与. 在FULL-CACHE模式下,两个s ...
- !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
http://hujiaweibujidao.github.io/blog/2013/11/18/android-ndk-and-opencv-development-3/ Android Ndk a ...
- 20.allegro.铺铜[原创]
1.内层铺铜 --- ---- 选择复制对象 ---- ----- ---- ------ --- --- --- 2.外层铺铜 -- -- 假如没有指定网络: 给这块没有网络的铜皮指定网络 --- ...
- Tuning 01 Overview of Oracle Performance Tuning
永无止境的调优 service level agreements: 是一个量化的调优的指标. performance 只要满足业务OK就可以了, 没必要调的很多, 因为有得必有失, 一方面调的特别优化 ...
- 浅谈Websocket、Ajax轮询和长连接(long pull)
最近看到了一些介绍Websocket的文章,觉得挺有用,所以在这里将自己的对其三者的理解记录一下. 1.什么是Websocket Websocket是HTML5中提出的新的协议,注意,这里是协议,可以 ...
- 网络攻击之二:XSS(之一是SQL注入,前面有文章)
学习了 http://www.oschina.net/question/565065_57506 (这里做了转载 http://blog.csdn.net/stilling2006/article/d ...
- hdu 4405 Aeroplane chess(简单概率dp 求期望)
Aeroplane chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- 函数buf_pool_init
/********************************************************************//** Creates the buffer pool. @ ...
- 51nod1556 计算
ans[n]=ans[n-1]*3-m[n-2];YY一下可以懂的.减掉的就是往下走的情况不符合正整数的情况.m是默慈金数. #include<cstdio> #include<cs ...