【转】视图、索引、存储过程 、触发器、游标及事务

原文地址:http://www.cnblogs.com/dong897812629/archive/2013/03/27/2981142.html

视图

1.视图不占物理存储空间,它只是一种逻辑对象。可将其看成一个"虚表"

视图是一个由select 语句指定,用以检索数据库表中某些行或列数据的语句存储定义

注:创建视图语句中,不能包括order by、compute或者compute by 子句,也不能出现into关键字

2.创建水平视图

视图的常见用法是限制用户只能够存取表中的某些数据行,用这种方法产生的视图称为水平视图,即表中行的子集

create view student_view1asselect * from student

where (class_id=‘0903‘)

3.创建投影视图

如果限制用户只能存取表中的部分列的数据,那么,使用这种方法创建的视图就称为投影视图,即表中列的子集

create view student_view2
asselect student_id as ‘学号‘ ,student_name as ‘姓名‘,sex as ‘性别‘

from student 

where sex=1

with check option /*强制视图上执行的所有修改语句必须符合由select 语句设置的准则*/

4.创建联合视图

用户可以生成从多个表中提取数据的联合视图,把查询结果表示为一个单独的"可见表"

索引

5.索引是数据库的对象之一,索引是为了加速对表中数据行的检索而创建的一种分散的一种存储结构。

索引是针对一个表而建立的,它是由数据页面以外的索引页面组成的

6.索引的分类

聚簇索引

数据表的物理顺序和索引表的顺序相同,它根据表中的一列或多列值的组合排列记录

create unique clustered index book_id_index--惟一性聚簇索引

on book(book_id asc)

with 

fillfactor=50 /*填充因子50%*/

非聚簇索引

create nonclustered index student_course_index

on student_course(student_id asc,course_id asc)

with

fillfactor=50

存储过程

存储过程是一系列预先编辑好的、能实现特定数据操作功能的SQL代码集。它与特定的数据库相关联,存储在SQL Server 服务器上

存储过程的好处:

(1)重复使用。存储过程可以重复使用,从而减少数据库开发人员的工作量

(2)提高性能。存储过程在创建的时候就进行了编译,将来使用的时候就不用再编译。一般的SQL语句使用一次就编译一次,所以使用存储过程提高了效率

(3)减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此减低了网络传输的运输量

(4)安全性。参数化的存储过程可以防止SQL注入攻击,而且可以将Grant、Deny、以及Revoke权限应用于存储过程

定义一个存储过程:

 create proc spAddStudents
  @name  nvarchar(50)=null
  as
  begin transaction --事务
  insert into [StudentInfo].[dbo].[Students]
  (Name)
  values
  (@name)

  if @@ERROR<>0
  begin
  rollback tran
  return
  end

  commit transaction--提交事务

创建一个实现加法计算并将运算结果作为输出参数的存储过程

 create proc spAdd
  @value1 int,
  @value2 int,
  @result int output
  as
  select @result=@value1+@value2
  go

执行spAdd存储过程

  declare @value1 int
  declare @value2 int
  declare @result int
  set @value1=1
  set @value2=1
  exec spAdd @value1,@value2,@result output
  print convert(char(5),@value1) +‘+‘+convert(char(5),@value2) +‘=‘+ convert(char(5),@result)

触发器

触发器是一种实施复杂数据完整性的特殊存储过程,在对表或视图执行update、insert或delete语句时自动触发执行,以防止对数据进行不正确、未授权或不一致的参数

/*创建update触发器*/
create trigger [dbo].[TaocanType_update] on [dbo].[Table_TaocanType]
for update
as
update [dbo].[Table_ChoseTaocanType] set Taocan=inserted.Taocan
from [dbo].[Table_ChoseTaocanType] ,inserted where [dbo].[Table_ChoseTaocanType].TaocanId=inserted.TaocanId

触发器能够维持两个表间的参照完整性,就像外键一样。外键执行这个任务的效率更高,因为它们在数据改变之前被测试,而不像触发器在数据改变后才触发

游标

游标是一种处理数据的方法,为了查看或者处理结果集中的数据,游标提供了在结果集中向前或者向后浏览数据的能力

(1)创建游标

(2)打开游标

(3)读取数据

(4)数据操作

(5)关闭和释放游标

  declare @taocan nvarchar(50),@youhui nvarchar(50)  declare taocan_cursor scroll cursor --声明游标
  for
  select Taocan,youhui from [189Shop].[dbo].[Table_TaocanType]
  for read only
  open taocan_cursor ---打开游标
  fetch from taocan_cursor  into @taocan,@youhui --从游标中提取行
  while @@FETCH_STATUS=0--表示成功完成FETCH 语句
  begin
  print ‘套餐:‘+@taocan+‘,优惠:‘+@youhui
  fetch from taocan_cursor into @taocan,@youhui
  end
  close taocan_cursor --关闭游标
  deallocate taocan_cursor --释放游标

事务

所谓事务,是指一个操作序列,这些操作序列要么都被执行,要么都不被执行,它是一个不可分割的工作单元

时间: 2024-10-07 21:52:19

【转】视图、索引、存储过程 、触发器、游标及事务的相关文章

mysql视图,存储过程,函数,事务,触发器,以及动态执行sql

一.视图 视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成.对其中所引用的基础表来说,视图的作用类似于筛选.定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图.通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少.视图是存储在数据库中的查询的SQL 语句,它主要出于两种原因:安全原因, 视图可以隐藏一些数据. 1.

MySQL必知必会读书笔记-8(表的操纵,视图,存储过程,游标,触发器)

1--表的操作 创建一个表 在创建表的时候应确保这个表之前不存在,若之前存在则应删除之后再创建 AUTO_INCREMENT表示自动增加 使用默认值的话,在列定义后加DEFAULT 常量,表示默认初始化为一个常量 更新一个表 添加一个列 删除一个列 定义外键 删除表 重命名一个表 2--视图 什么是视图 视图是一个虚拟的表,它与普通的表不一样,视图只包含使用时动态数据的查询. 举例: 搜索买了某个产品的客户的信息的查询语句,我们可以将其包装成为一个虚拟表productcustomers, 使用这

mysql中的索引、触发器、和事务

一.索引 1.什么是索引 如果把表看做一本书,索引就好像书里的目录或者书签,能帮助你快速找到你要检索的内容,所以叫做索引. 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如 果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合 要求的记录.表里面的记录数量越多,这个操作的代价就越高.如果作为搜索条件的列上已 经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置.如果表有1000个 记录,通过索引查找记录至少要比

视图 索引 存储过程

视图——相对应的是表查询结果.表——真正存储数据的地方.视图——不存数据,展示查询的结果. 视图就是为了查询数据方便.一般不要试图向视图中插入数据,容易出错.视图可以由一个表生成,也可以由多个表生成,还可以由表各视图生成新的视图. 掌握:1.视图是个什么东西?2.会建视图,会查视图3.知道视图的主要功能是查询,不是增删除改. 索引:为了提高查询效率.簇索引,非簇索引 1.数据的默认存储次序跟簇索引的次序一样的.一个表中只有能有一个簇索引.2.非簇索引是单独放置的,查询的时候,先查非族索引,再跟据

第五章 MySQL事务,视图,索引,备份和恢复

第五章 MySQL事务,视图,索引,备份和恢复 一.事务 1.什么是事务 事务是一种机制,一个操作序列,它包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求.要么都执行,要么都不执行. 事务是作为最小的控制单元来使用的,特别使用与多用户同时操作的数据库系统. 2.为什么需要事务 事务(transaction)是指将一系列数据操作捆绑成为一个整体进行统一管理,如果某一事务执行成功,则在该事务中进行的所有数据均会提交,成为数据库中永久的组成部分.如果事务执行遇到错误且

视图 索引

在视图上创建索引需要三个条件:一.视图必须绑定到架构.要做到这点,在 CREATE VIEW 语句中,必须加上 WITH SCHEMABINDING,如果是使用企业管理器,则在设计界面的空白处点击右键,属性,选中“绑定到架构”.二.索引必须是唯一索引.要做到这点,在 CREATE INDEX 中必须指定 UNIQUE.三.索引必须是聚集索引.要做到这点,在 CREATE INDEX 中必须指定 CLUSTERED.例:CREATE VIEW viewFoo WITH SCHEMABINDINGA

T-SQL应用,视图、存储过程、触发器、游标、临时表等

sqlserver常用操作: 视图.存储过程.触发器.函数 --*********************批处理********************* --[在一个批处理中存有一个语法错误,则所有的语句都无法通过编译] USE flowershopdb SELECT * FROM tb_category SELECT * FROM tb_detailed SELECT * FROM tb_product SELECT * FROM tb_shopping SELECT * FROM tb_u

查询SQLServer2005中某个数据库中的表结构、索引、视图、存储过程、触发器以及自定义函数

查询SQLServer2005中某个数据库中的表结构.索引.视图.存储过程.触发器以及自定义函数 2013-03-11 09:05:06|  分类: SQL SERVER|举报|字号 订阅 (1)查询SQLServer2005中某个数据库中的表结构 SELECT TOP 100 PERCENT --a.id,CASE WHEN a.colorder = 1 THEN d.name ELSE '' END AS 表名,CASE WHEN a.colorder = 1 THEN isnull(f.v

Mysql----浅入浅出之视图、存储过程、触发器

一.视图 VIEW 视图是虚拟的表,本身不存储任何数据.只有运行时,才包含动态检索出来的数据. eg:SELECT sid, name, sex, s_num FROM  student, school WHERE sid = 2 AND student.sid = scholl.sid ; 这个简单的查询涉及到两个表.所以任何需要这个数据的人都必须熟悉两个表以及之间的关系.想检索其他学生信息,就必须修改WHERE子句.如果可以把整个查询包装成一个虚拟表studentinfo,那么就可以这样得到

MySQL笔记---视图,存储过程, 触发器的使用入门

大二学数据库的时候,只是隐约听到老师提起过视图啊,存储过程啊,触发器啊什么的,但只是淡淡的记住了名字,后来自己做些小项目,小程序,也没有用上过,都只是简单的建表,关联表之类的,导致我对这些东西的理解只能停留在名称的阶段.最近看完了一本薄薄的小书叫<MySQL必知必会>,记了不少笔记,也自己上手实践了一番,总算是了解了些皮毛. 下面通过实例来具体了解这几个东西,首先我的样例表是这样的. 视图: 什么是视图? 视图是虚拟的表,本身并不包含数据,通过一个例子,来更好地理解视图: 假设上述表中,我需要