存储过程、触发器、数据完整性

存储过程、触发器、数据完整性

By TreeDream

存储过程、触发器、数据完整性存储过程创建存储过程修改存储过程删除存储过程触发器创建触发器数据完整性约束默认值创建默认值绑定默认值解除默认规则创建规则绑定和解除规则,删除

存储过程

将需要多次调用以实现某个特定任务的代码段编成一个过程

创建存储过程

create procedure exp1
as
select *
from Stock
Go
?
exec exp1

带参数的存储过程

if exists (select name from sysobjects where name =‘exp2‘ and type = ‘P‘)
drop procedure exp2
Go
create procedure exp2 @mno char(8),@mname varchar(50),@mspeci varchar(20)
as
insert into Stock(mat_num,mat_name,speci)
values(@mno,@mname,@mspeci)
GO
?
execute exp2 ‘m030‘,‘护套绝缘电线‘,‘BVV-35‘

带默认输入参数的存储过程

if exists (select name from sysobjects where name = ‘exp3‘ and type = ‘P‘)
drop procedure exp3
GO
create procedure exp3 @mname varchar(50) = ‘%绝缘%‘,@pno char(8) = ‘20110005‘
as
select mat_name,speci,prj_name,prj_status
from Stock,Salvaging,Out_stock
where Stock.mat_num = Out_stock.mat_num and Salvaging.prj_num = Out_stock.prj_num and mat_name like @mname and Salvaging.prj_num = @pno
GO
?
execute exp3
execute exp3 @pno = ‘20110002‘

带输出参数的存储过程

if exists (select name from sysobjects where name = ‘exp4‘ and type = ‘P‘)
drop procedure exp4
GO
create procedure exp4 @pn char(8),@sum int output
as
select @sum = sum(amount)
from Out_stock
where prj_num = @pn
GO
?
declare @total int
execute exp4 ‘20110002‘,@total output
print ‘总量‘+ cast(@total as varchar(20))

修改存储过程

修改和创建相同alter

删除存储过程

drop procedure exp4

触发器

当用户进行插入,删除,更新等数据操作的时候,自动触发所定义的SQL语句

创建触发器

insert触发器,同时将数据复制到基本表和内存中的Inserted表中

if exists (select name from sysobjects where name = ‘tr1_stock‘ and type = ‘P‘)
drop trigger tr1_stock
GO
create trigger tr1_stock
on Stock
after insert
as
declare @amount int
select @amount = amount
from inserted
if @amount < 1
Begin
rollback tran
raiserror (‘amount must be greater than 1!‘,16,10)
END
GO
create trigger tr1_outstock
on Out_stock
after insert
as
Begin
declare @m_num char(8),@m_amount int
select @m_num = mat_num,@m_amount = amount
from inserted
update stock
set amount = amount - @m_amount
where mat_num = @m_num
END
GO

delete触发器:将删除的数据保存于deleted中,SQL语句中还可以引用

create trigger tr2_stock
on Stock
after delete
as
Begin
declare @mat_num char(8)
select @mat_num = mat_num
from deleted

delete
from Out_stock
where mat_num = @mat_num
END

update触发器:合并了inserted deleted 触发器

create trigger tr3_stock
on Stock
after update
as
declare @amount_new int,@amount_old int,@mat_num char(10)
select @amount_new = amount,@mat_num = mat_num
from inserted
if @amount_new < 1
Begin
select @amount_old = amount
from deleted
update Stock
set amount = @amount_old
where mat_num = @mat_num
END

数据完整性

约束

  • 建表的时候:列级完整性约束,表级完整性约束
  • alter table Salvaging
    add constraint PK_salvaging primary key(prj_num)
    ?
    alter table Salvaging
    add constraint data_check check(start_date<=end_date)
    ?
    alter table Salvaging
    add constraint DF_salvaging default (0) for prj_status
    ?
    alter table Salvaging
    drop constraint data_check

默认值

默认值对象独立于表

创建默认值

create default _Getdate
as getdate()

绑定默认值

sp_bindefault _Getdate, ‘Out_stock.get_date‘

解除默认

sp_unbindefault _Getdate

规则

check约束是在create table中建立的,规则独立于表

创建规则

create rule amount_rule
as
@amount>0 and @amount<=100

绑定和解除规则,删除

create rule amount_rule
as
@amount>0 and @amount<=100
?
sp_bindrule amount_rule,‘Stock.amount‘
sp_unbindrule amount_rule,‘Stock.amount‘
?
drop rule amount_rule
时间: 2024-11-03 22:12:54

存储过程、触发器、数据完整性的相关文章

存储过程 &amp; 触发器

触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用.当对某一表进行诸如UPDATE. INSERT. DELETE 这些操作时, 就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则. 触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性.除此之外,触发器还有其它许多不同的功能: (1)强化约束(Enforce restriction) 触发器能够实现比CHECK 语句更为复杂的约束.

批量删除Sql Server对象(表,存储过程,触发器)

先在系统表中找到要处理的表名或者是存储过程的名字,在用游标对其进行处理 PS:SqlServer 2000使用的是系统表是sysobjects,类型字段是:xtype; SqlServer 2005以上版本的系统表是Sys.Objects,类型字段是Type 本文中以Sql2005为例,Sql2000版本请自行按照上述说明进行替换 注意  sys.objects 中type的值不同 删除命令是不同的 如删除存储过程用drop PROCEDURE PROCEDURENAME 删除表用 drop t

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

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

2017-3-16 Tsql基础编程 存储过程 触发器 级联删除

1.定义变量: declare @变量名 数据类型 变量赋值: set @变量名 = 值: select @变量名 = 值:(常用) 取值打印: select @变量名        print @变量名 要执行变量赋值取值的时候代码要一起执行,不能分句执行: declare @aa int ;select @aa = 11;select @aa; 打印结果: 2.分支语句: if @a>@b begin 语句 end else begin 语句 end declare @a int; decl

SQL2008--SQL语句-存储过程-触发器-事务处理-基本语法-函数

环境 SQL2008 1.存储过程建立 库-可编程性-存储过程-右击“存储过程”-点击“新建存储过程” SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE [dbo].[zgccgc] //存储过程的名字 @zgID nvarchar(10),    //定义参数区@zgname nvarchar(10),@zgage  int,@zgaddress nvarchar(200) ASBEGIN    insert into

存储过程 触发器 约束

定义(定义时不能赋值):declare   @名   类型 赋值:set (或select) @名=’需要赋给@名的值’ 存储过程: 手动调用 弊端是不容易迁移数据(迁移时迁表,存储时重写) 格式: create  procedure  存储过程名(UP_表名_操作) 行参(传递的行参) As Begin 可定义变量(临时用的行参) 语句 End 使用: 存储过程名  行参 例题: ALTER PROCEDURE [dbo].[BuyFruit] @username varchar(20), @

关于oracle的函数,存储过程,触发器,序列,视图,左右连接一些的应用 带案例

CREATE TABLE STUDENT( --创建学生表  ID NUMBER(10) PRIMARY KEY,   --主键ID  NAME VARCHAR2(20),  CLASSNAME VARCHAR2(20) --班级ID);CREATE SYNONYM STU FOR STUDENT; --给学生表STUDENT创建别名(同义词)INSERT INTO STUDENT VALUES(1,'Tom',1);INSERT INTO STUDENT VALUES(2,'Jack',1);

第五章 存储过程&amp;触发器

1.前言 2.存储过程和触发器->存储过程 ·理解:是一组SQL命令集合,经过预编译存放在系统中:就像java程序里的方法,可以重复的被调用: 在日常的数据库操作中,会有大量的T-SQL批处理.游标,如果每次都要去重写或者打开脚本来执行会相当麻烦, 数据库可以将我们编写的T-SQL批处理保存在一个处理过程中. --创建 ·语法格式:create {proc | procedure} 存储名 [ @参数名 数据类型 [,···n] ] as [begin] sql语句[块] [end] ·例:无参

30.4. MySQL函数,存储过程,触发器,视图

函数 函数:系统函数和自定义函数系统函数:https://dev.mysql.com/doc/refman/8.0/en/func-op-summary-ref.html函数也可以进入数据库之后利用help命令来查看帮助,比如help max自定义函数 (user-defined function UDF) 注自定义函数定义之后保存在mysql.proc(mysql.func)表中 创建UDFCREATE [AGGREGATE] FUNCTION function_name(parameter_

事务视图存储过程触发器数据备份

目录 事务 事务的特性 原子性(Atomicity): 一致性(Consistency): 隔离性(Isolation): 持久性(Durability): 存储引擎 InnoDB :保时捷引擎 MyIsam:奔奔引擎 视图 使用 增加视图 删除视图 触发器 存储过程 创建 函数 数据库的备份 语法 示列 事务 通俗的说,事物指一组操作,要么都执行成功,要么都执行失败 使用事务: start transactino sql语句 commit/rowllback # 演示: mysql> sele