zoukankan      html  css  js  c++  java
  • 存储过程 触发器 约束

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

    了解 悲观锁 和 乐观锁

  • 相关阅读:
    Artifact Project3:war exploded: Error during artifact deployment. See server log for details.
    Struts2的OGNL表达式语言
    java空指针异常:java.lang.NullPointException
    两天撸一个天气应用微信小程序
    Graves of the Internet
    JavaScript并非“按值传递”
    js实现黑客帝国二进制雨
    JavaScript“并非”一切皆对象
    纯CSS打造银色MacBook Air(完整版)
    element-ui中轮播图自适应图片高度
  • 原文地址:https://www.cnblogs.com/wanwuguizong/p/3977527.html
Copyright © 2011-2022 走看看