首页 > 代码库 > 存储过程 触发器 约束

存储过程 触发器 约束

定义(定义时不能赋值):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 name=@fruitname

   

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

    if @buycount < @kc

    begin

       declare @money decimal(18,2)

       select @money = account from login where username=@username --根据用户名找到账户余额

       if(@money > @price*@buycount)

       begin

           update login set account=account-@price*@buycount where username=@username

           update fruit set numbers = numbers-@buycount where name=@fruitname

           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

 

 

了解 悲观锁 和 乐观锁

存储过程 触发器 约束