数据库中的触发器,索引 ,事务
更新:HHH   时间:2023-1-7


一.触发器

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

/*创建触发器*/
creat [temp|temporary] trigger name
[before|after] [insert|update|delete of columns] on table
begin
SQL语句
end;

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


二.索引

(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 @errorSum=@errorSum+@@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 @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)

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

返回数据库教程...