数据库中的触发器,索引 ,事务

一.触发器

触发器是一种实施复杂数据完整性的特殊存储过程,在对表或视图执行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)定义:

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

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

create unique clustered index book_id_index--惟一性聚簇索引
on book(book_id asc)
with 
fillfactor=50 /*填充因子50%*/

(2)索引的分类

  1. 聚簇索引

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

create unique clustered index book_id_index--惟一性聚簇索引
on book(book_id asc)
with 
fillfactor=50 /*填充因子50%*/

b. 非聚簇索引

create nonclustered index student_course_index
on student_course(student_id asc,course_id asc)
with 
fillfactor=50

三.事务

(1)定义:

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

(2)语法步骤:

  1. 事务开始:BEGIN TRANSACTION
  2. 事务提交:COMMIT TRANSACTION
  3. 事务回滚:ROLLBACK TRANSACTION
  4. 判断某条语句执行是否出错:全局变量@@ERROR;

    @@ERROR只能判断当前一条T-SQL语句执行是否有错,为了判断事务中所有T-SQL语句是否有错,我们需要对错误进行累计; 例:SET @[email protected][email protected]@error

四.存储过程

(1)定义:

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

(2)存储过程的好处:

  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

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

 create proc spAdd
  @value1 int,
  @value2 int,
  @result int output
  as
  select @[email protected][email protected]
  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)

参考:http://www.xuebuyuan.com/2041347.html

时间: 2024-10-05 23:42:06

数据库中的触发器,索引 ,事务的相关文章

mysql中的触发器和事务的操作

触发器 语法 创建触发器: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt; trigger_time是触发程序的动作时间.它可以是BEFORE或AFTER trigger_event指明了激活触发程序的语句的类型. trigger_event可以是下述值之一: ·             INSERT:将新行插入表时激活触发程序,例如,通过INSERT.LO

数据库---视图,触发器,事务,存储过程 ,函数,流程控制, 索引与慢查询优化,测试索引,数据库三范式(简介)

视图 1.什么是视图 ? 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 ? 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; 强调 1.在硬盘中,视图只有表结构文件,没有表数据文件 2.视图通常是用于查询,尽量不要修改视图中的数据 drop

数据库中的视图索引

一.视图 1.什么是视图: 视图是从一个或多个表中导出来的表,是一种不是一种真正存在的概念. 视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据. 这样,用户可以不用看到整个数据库中的数据,而之关心对自己有用的数据. 数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中. 使用视图查询数据时,数据库系统会从原来的表中取出对应的数据. 视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变. 2.视图操作sql: 创建视图: creat

数据库 --- 40 视图 触发器 存储过程 事务 函数

一.视图  (view) 视图是一种虚拟表,可以把查询出来的临时表保存下来 1.创建视图 2.删除视图 3.修改视图,(原始表的记录也跟着修改) 4.查看视图 二.  触发器(trigger)可进行  增删改  操作 1.创建触发器 2.删除触发器 实例: 三.存储过程  1. 优点: 缺点: 2.程序与数据库结合使用的三种方式 3.创建简单存储过程(无参) 4.创建存储过程(有参) ① in  传入参数 ② out  返回值 #查看存储过程的一些信息:show create procedure

查看数据库中存在触发器的表

这次在项目中,我们为了做数据库同步,采用了触发器机制,为数据库做迁移时,我们需要获取数据库中那些表使用了触发器,方便制作数据库安装包. 构思: 触发器在MSSQL作为一个对象进行管理,那么我们就可以通过sysobjects表进行查询获取,所以我们就编写了一下触发器获取SQL SELECT object_name(a.parent_obj) as [表] ,a.name as [触发器] ,(case when b.is_disabled=0 then '使用中' else '停用' end) a

WPF触发器(非数据库中的触发器)

一.什么是触发器?触发器(Trigger)就是当某种条件满足后即完成相应逻辑功能的一部分程序组成.在当前的WPF中,Trigger一共有三种类型,它们分别是: (1)属性触发器:其对应的类是Trigger.它在特定关联属性发生变化时被触发. (2)数据触发器:其对应的类是DataTrigger.它在特定的CLR类型所记录的值发生变化时被触发. (3)事件触发器:其对应的类是EventTrigger.它将在特定的路由事件发生时被触发. 在WPF中,每一个可以使用触发器的类中都会有一个Trigger

浅谈数据库中的触发器

触发器 其是一种特殊的存储过程.一般的存储过程是通过存储过程名直接调用,而触发器主要是 通过事件(增.删.改)进行触发而被执行的.其在表中数据发生变化时自动强制执行. 常见的触发器有两种:after(for).instead of,用于insert.update.delete事件. after(for)        表示执行代码后,执行触发器 instead of        表示执行代码前,用已经写好的触发器代替你的操作 触发器语法: create trigger 触发器的名字   on

数据库中的聚集索引、非聚集索引、优化索引

这篇文章我们来讨论一下索引的问题吧,这篇文章不会介绍怎么创建索引,但是会介绍怎么优化索引. 什么是索引? 索引是对记录按照多个字段进行排序的一种方式.对表中的某个字段建立索引会创建另一种数据结构,其中保存着字段的值,每个值又指向与它相关的记录.这种索引的数据结构是经过排序的,因而可以对其执行二分查找. 怎么理解索引呢?我们经常用在windows系统下,查询某些文件,系统都会建议我们建立文件的索引.比如,如果你要查询一个文件名,系统要扫描所有文件进行傻瓜式地扫描,速度当然会很慢.当我们建立了索引后

数据库视图,触发器和事务

--select 查询出来的结果集可以通过as 起别名当做虚拟表来用 select*from (select*from score ,grade where score.degree between low and upp)as jibietable where rank='A' --创建视图(视图只能建立在实体表的基础上) create view shitu1 as   select student.sname,student.sno,score.degree from student,sco