存储过程 触发器 约束

定义(定义时不能赋值):declare   @名   类型

赋值:set (或select) @名=’需要赋给@名的值’

存储过程:

手动调用

弊端是不容易迁移数据(迁移时迁表,存储时重写)

格式:

create  procedure  存储过程名(UP_表名_操作)

行参(传递的行参)

As

Begin

可定义变量(临时用的行参)

语句

End

使用:

存储过程名  行参

例题:

ALTER PROCEDURE [dbo].[BuyFruit]

@username varchar(20),

@fruitname varchar(20),

@buycount int =  0

AS

BEGIN

declare @kc int,@price float,@fruitid varchar(20)

--先把该水果的库存量找出来

select @fruitid=ids, @kc = numbers,@price=price from fruit where [email protected]

--根据购买数量和库存的关系,进行购买

if @buycount < @kc

begin

declare @money decimal(18,2)

select @money = account from login where [email protected] --根据用户名找到账户余额

if(@money > @price*@buycount)

begin

update login set [email protected]*@buycount where [email protected]

update fruit set numbers = [email protected] where [email protected]

declare @ordercode varchar(50)

set @ordercode =‘O‘+cast(getdate() as varchar(50))

insert into orders values(@ordercode,@username,GETDATE())

insert into orderdetails values(@ordercode,@fruitid,@buycount)

end

else

begin

print ‘余额不足‘

end

end

else

begin

print ‘库存不足‘

end

END

触发器:

可查,可读,不可改

系统自动写,有inserted和deleted两个临时表

Inserted 存放任何更改后的新信息

Deleted存放最后一条的删除信息

在表的  属性里面的 扩展属性里  对表的内容进行说明,达到一看就懂得效果

删除主表时的主键时 ,如果从表中的数据还有与主键相关的值,则不能成功,因为他破坏了引用的完整性。

默认情况下,从表的数据删完才能删主键,

级联:表 设计 左上角 从表的关系 设置级联

格式:

Create  trigger   触发器名(UP_表名_操作)

On 表名

For(或insert of) 操作

As

语句

Go

例题:

create  trigger  TR_STUDENT_DELETE

on student

for delete

as

declare @no varchar(3),@name varchar (4)

select  @no=sno ,@name=sname from deteled

insert into biandong values (@no,@name,‘100‘)

go

select * from student

事务:

Begin  tran(或transaction)--开始事务

Commit  --提交

Rollback  --回滚事务

事务特性:A原子性(atomicity)

C一致性(consistency)

I隔离性(isolation)

D持久性(durability)

@@error 是判断事务有没有错的条件 没错时值为0,出错时值不为0

例:

If  @@error<>0

Rollback

Else

Commit

例:

Begin tran

Begin try

语句

Commit

End try

Begin catch

Rollback

End catch

了解 悲观锁 和 乐观锁

时间: 2024-08-08 02:40:40

存储过程 触发器 约束的相关文章

存储过程 &amp; 触发器

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

T-SQL 判断 是否存在(数据库,表,存储过程,约束。。。和列)

判断数据库是不是存在  if DB_ID(N'DATABASENAME') is not null 判断表,视图,存储过程,游标的方法综合如下: use databasename--跳转到指定数据库  go if object_id(N'a',N'U') is not null drop table a go 注:a 是一个表,U代表是数据表类型 类似于U的类型代码,如下所示 对象类型: AF = 聚合函数 (CLR) C = CHECK 约束 D = DEFAULT(约束或独立) F = FO

sql sever-T-SQL 判断 是否存在(数据库,表,存储过程,约束。。。和列)

 if DB_ID(N'DATABASENAME') is not null use databasename--跳转到指定数据库  go if object_id(N'a',N'U') is not null drop table a go 注:a 是一个表,U代表是数据表类型 类似于U的类型代码,如下所示 对象类型: AF = 聚合函数 (CLR) C = CHECK 约束 D = DEFAULT(约束或独立) F = FOREIGN KEY 约束 PK = PRIMARY KEY 约束 P

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

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

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

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

关于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] ·例:无参