精华内容
下载资源
问答
  • SQL创建触发器

    2016-11-15 21:23:17
    情况:一张表仅有2个外键,更新这张表的时候利用触发器更新对应外键的表的字段加1 代码: create trigger goods_tirgger_insert after insert on favorites for each row begin update goodsinfo set collectNum...

    情况:一张表仅有2个外键,更新这张表的时候利用触发器更新对应外键的表的字段加1

    代码:

    create trigger goods_tirgger_insert  after insert  on favorites 
    for each row
     begin 
    update goodsinfo set collectNum=collectNum+1 where goodsinfo.id=new.goodId;
    end

    情况:删除这张表中的一行,对应外键的字段减1

    代码:

    create trigger goods_tirgger_delete after delete on favorites   
    for each row  
     begin   
    update goodsinfo set collectNum=collectNum-1 where goodsinfo.id=old.goodId;
    end


    展开全文
  • SQL 创建触发器

    千次阅读 2011-11-29 15:31:14
    为什么需要触发器 为什么需要触发器(TRIGGER)呢?典型的应用就是银行的取款机系统 假定该系统的数据库设计需要两张表:帐户信息表(bank)存放帐户的信息,交易信息表(transInfo)存放每次的交易信息。     ...
      
    

    为什么需要触发器

    为什么需要触发器(TRIGGER)呢?典型的应用就是银行的取款机系统 假定该系统的数据库设计需要两张表:帐户信息表(bank)存放帐户的信息,交易信息表(transInfo)存放每次的交易信息。

     SQL 创建触发器 - Wilson - Wilson

     

    上述结果有什么错误?您一定发现了,当张三取钱200元时,虽然交易信息表(transInfo)中保存了取钱200元的交易信息,但帐户表(bank)中的余额仍是1000,没有自动跟随修改。显然,我们应该根据交易类型是“支取”还是“存入”,自动减少或增加帐户表中的余额。而且,它还应该具有事务的特征:一旦交易失败,余额修改也应该自动取消 。那么,如何解决呢?这种特殊的业务规则使用普通约束行吗 ?

    答案显然是否定的 。使用事务行吗?事务能保证一旦交易失败,余额修改也自动取消。但实现不了自动修改的触发功能 。所以,最优的解决方案就是采用触发器。触发器它是一种特殊的存储过程,并且也具有事务的功能,它能在多表之间执行特殊的业务规则或保持复杂的数据逻辑关系 。

     

    什么是触发器

    再看一个例子:目前有两张表,分别存放在职员工和退休员工的信息。

    假定现赵二退休:赵二将从员工表中删除。

    一旦删除赵二的信息,应自动触发一个动作:将赵二的信息保存到退休员工表中。

    强调:自动触发,而不是手动,如何实现呢,当然是使用触发器。

    q       触发器是在对表进行插入、更新或删除操作时自动执行的存储过程

    q       触发器通常用于强制业务规则

    q       触发器是一种高级约束,可以定义比用CHECK 约束更为复杂的约束

    q       可执行复杂的SQL语句(if/while/case)

    q       可引用其它表中的列

    q       触发器定义在特定的表上,与表相关

    q       自动触发执行

    q       不像存储过程,不需要也不能人工调用执行

    q       本身就是一个事务,所以,如果发现有错误,可以回滚撤销操作。

     

    触发器的类型

    INSERT触发器:当向表中插入数据时触发,自动执行触发器所定义的SQL语句。

    UPDATE触发器:当更新表中某列多列时触发,自动执行触发器所定义的SQL语句。

    DELETE触发器:当删除表中记录时触发,自动执行触发器所定义的SQL语句。

     

      inserted 和deleted 表

    q       触发器触发时:

    q       系统自动在内存中创建deleted表或inserted表

    q       只读,不允许修改;触发器执行完成后,自动删除

    q       inserted 表

    q       临时保存了插入或更新后的记录行

    q       可以从inserted表中检查插入的数据是否满足业务需求

    q         如果不满足,则向用户报告错误消息,并回滚插入操作

    q       deleted 表

    q       临时保存了删除或更新前的记录行

    q       可以从deleted表中检查被删除的数据是否满足业务需求

    q         如果不满足,则向用户报告错误消息,并回滚插入操作

     修改操作  inserted表  deleted表
     增加(INSERT)记录  存放新增的记录  -----
     删除(DELETE)记录  -----  存放被删除的记录
     修改(UPDATE)记录  存放更新后的记录  存放更新前的记录

    inserted表和deleted表存放的信息

     

    如何创建触发器

    创建触发器的语法:

    CREATE TRIGGER trigger_name
    
     ON table_name
    
     [WITH ENCRYPTION]
    
      FOR [DELETE, INSERT, UPDATE]
    
     AS 
    
      T-SQL语句
    
    GO
    
    

    WITH ENCRYPTION表示加密触发器定义的SQL文本

    DELETE, INSERT, UPDATE指定触发器的类型

    insert触发器的工作原理:

    1.执行insert插入语句,在表中插入数据行;

    2.触发insert触发器,向系统临时表inserted表中插入新行的备份(副本)

    3.触发器检查inserted表中插入的新行数据,确定是否需要回滚或执行其他操作。

    问题:

    解决上述的银行取款问题:当向交易信息表(transInfo)中插入一条交易信息时,我们应自动更新对应帐户的余额。

     

    分析:

    l        在交易信息表上创建INSERT触发器

    l        从inserted临时表中获取插入的数据行

    l        根据交易类型(transType)字段的值是存入/支取,

    l         增加/减少对应帐户的余额。

    CREATE TRIGGER trig_transInfo 
    
     ON transInfo 
    
      FOR INSERT 
    
       AS
    
       DECLARE @type char(4),@outMoney MONEY
    
       DECLARE @myCardID char(10),@balance MONEY
    
       SELECT @type=transType,@outMoney=transMoney,
    
             @myCardID=cardID FROM inserted /*从inserted表中获取交易类型、交易金额等*/
    
         IF (@type='支取') /*根据交易类型,减少或增加对应卡号的余额 */
    
            UPDATE bank SET 
    
                 WHERE 
    
        ELSE
    
            UPDATE bank SET 
    
                 WHERE 
    
        …..
    
    GO 
    
    


     

    delete触发器的工作原理:

    1.执行delete删除语句,删除表中的数据行;

    2.触发delete删除触发器,向系统临时表的deleted表中插入被删除的副本

    3.触发器检查deleted表中被删除的数据,确定是否需要回滚或执行其他操作。

    问题:

    当删除交易信息表时,要求自动备份被删除的数据到表backupTable中 。

     

    分析:

    l        在交易信息表上创建DELETE触发器

    l        被删除的数据可以从deleted表中获取

    CREATE TRIGGER trig_delete_transInfo
    
     ON transInfo
    
      FOR DELETE 
    
       AS
    
          print '开始备份数据,请稍后......'
    
          IF NOT EXISTS(SELECT * FROM sysobjects 
    
               WHERE name='backupTable')
    
             SELECT * INTO backupTable FROM deleted/*从deleted表中获取被删除的交易记录*/
    
         ELSE
    
             INSERT INTO backupTable SELECT * FROM deleted
    
          print '备份数据成功,备份表中的数据为:'
    
          SELECT * FROM backupTable 
    
    GO 
    
    


     

    UPDATE触发器的工作原理:

    执行更新操作,例如把李四的余额改为20001元。

    更新操作可以看出两步:

    1.删除李四原有的数据:李四 1000 0002  1,将数据备份到deleted表中。

    2.再插入新行:李四 1000 0002  20001,将数据备份到inserted表中。

    最后看起来就是把余额从1元修改为20001元了。

    所以:如果我们希望查看修改前的原始数据,可以查看表deleted 。

    如果我们希望查看修改后的数据,可以查看表inserted 。

    问题:

    跟踪用户的交易,交易金额超过20000元,则取消交易,并给出错误提示。

     

    分析:

    l        在bank表上创建UPDATE触发器

    l        修改前的数据可以从deleted表中获取

    l        修改后的数据可以从inserted表中获取

    CREATE TRIGGER trig_update_bank
    
     ON bank
    
      FOR UPDATE
    
       AS
    
          DECLARE @beforeMoney MONEY,@afterMoney MONEY  
    
    /*从deleted表中获取交易前的余额,从inserted表中获取交易后的余额*/
    
          SELECT @beforeMoney=currentMoney FROM deleted   
    
          SELECT @afterMoney=currentMoney FROM inserted    
    
          IF ABS(@afterMoney-@beforeMoney)>20000 /*交易金额是否>2万*/
    
            BEGIN
    
                print '交易金额:'+convert(varchar(8),
    
                    ABS(@afterMoney-@beforeMoney))
    
                RAISERROR ('每笔交易不能超过2万元,交易失败',16,1)
    
                ROLLBACK TRANSACTION /*回滚事务,撤销交易*/
    
             END
    
    GO 
    
    


     

    列级 UPDATE 触发器

    q       UPDATE触发器除了跟踪数据的变化(修改)外,还可以检查是否修改了某列的数据

    q       使用UPDATE()(列)函数检测是否修改了某列

    问题:

    交易日期一般由系统自动产生,默认为当前日期。为了安全

    起见,一般禁止修改,以防舞弊。

     

    分析:

    UPDATE(列名)函数可以检测是否修改了某列

    CREATE TRIGGER trig_update_transInfo
    
     ON transInfo
    
      FOR UPDATE
    
       AS
    
          IF UPDATE(transDate)/* 检查是否修改了交易日期列transDate*/
    
             BEGIN
    
                print '交易失败.....'
    
                RAISERROR (‘安全警告:交易日期不能修改,
    
                               由系统自动产生',16,1)
    
                ROLLBACK TRANSACTION   /*回滚事务,撤销交易*/ 
    
             END
    
    GO 
    
    


     

    好,我们来做个总结:

    q       触发器是在对表进行插入、更新或删除操作时自动执行的存储过程,触发器通常用于强制业务规则

    q       触发器还是一个特殊的事务单元,当出现错误时,可以执行ROLLBACK TRANSACTION回滚撤销操作

    q       触发器一般都需要使用临时表:deleted表和inserted表,它们存放了被删除或插入的记录行副本

    q       触发器类型:

    q        INSERT触发器

    q        UPDATE触发器

    q        DELETE触发器

    ___________________________________________________________________

    我自己写的触发器

    购买会员卡后,会员绑定卡号,并且升级。

    CREATE TRIGGER trig_update_member
    
     ON club_MemberCard
    
      FOR UPDATE
    
       AS
      DECLARE @membercardpassword varchar(50),@membercardno varchar(50),@membertypeid int,@memberid int,@membercardid int
     select @membercardpassword=password   from     inserted     /*卡号密码*/
     select @membercardno=cardno from  inserted                                /*卡号*/
     select @membertypeid=membertypeid from inserted                     /*类型*/
     select @memberid=memberid from inserted                                 /*用户ID*/
     select @membercardid=id from inserted                                      /*会员卡id*/
     IF UPDATE(memberid)              /* 检查是否修改了交易完成列memberid*/ 
              BEGIN
      if((select membercardno from club_member where ) is null)   /* 检查会员是否第一次购卡*/ 
      begin  
       update club_member set ,
          ,
           
       where ID 
      end
      else
      begin  
       update club_member set 
       where ID 
       update club_membercard set memberid=null
       where 
      end
    
                 END
    
     
    
    CREATE TRIGGER trig_update_membercard
    
     ON dbo.shop_OrderInfo
    
      FOR UPDATE
    
       AS
      DECLARE @memberid bigint,@type int,@orderid int
     select @memberid=memberid   from     inserted                                                    /* 用户ID*/
     select @orderid=id from inserted
     select @type=membertypeid from  shop_goodsinfo where id in (select GoodsID from shop_orderdetail where orderid )   /* 用户类型ID*/
     IF UPDATE(isreceive)              /* 检查是否修改了交易完成列isreceive*/ 
      IF ((select isreceive from shop_orderinfo where id in
      (select orderid from shop_orderdetail where  goodsid in 
       (select id from shop_goodsinfo where goodstypeid=8)) and )=1)
                BEGIN
       update club_membercard set where id in
         (select top 1 id from club_membercard where memberid is null and )
        END
    
    

     

    --------------------------------------------------------

    短信平台,判断短信内容是否正确

    USE [Msg]
    GO
    
    /****** Object:  Trigger [dbo].[trig_CheckMsg]    Script Date: 11/29/2011 15:29:08 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    -- =============================================
    -- Author:		<Wilson,Chan>
    -- Create date: <2011-11-16,12:19,>
    -- Description:	<判断短信格式是否正确,,>
    -- =============================================
    
    
    CREATE TRIGGER [dbo].[trig_CheckMsg]
    	ON [dbo].[MSG_Inbox]
    	FOR INSERT
    AS
     DECLARE @project_id int,@inorout int,@shop_id int,@inbox_id int
     DECLARE @class1 int,@class2 int,@class3 int,@onduty int
     DECLARE @sender varchar(100),@str varchar(max),@time datetime
     DECLARE @sum int,@test int    --字符串数组个数,待验证的‘店号’
     Select @inbox_id=id from inserted
     select @str=MsgTitle from inserted
     Select @sender=sender from inserted
     select @time=MsgArrivedTime from inserted
     
     BEGIN TRY
    	set @str=REPLACE(@str,',',',')
    	set @str=REPLACE(@str,'0','0')
    	set @str=REPLACE(@str,'1','1')
    	set @str=REPLACE(@str,'2','2')
    	set @str=REPLACE(@str,'3','3')
    	set @str=REPLACE(@str,'4','4')
    	set @str=REPLACE(@str,'5','5')
    	set @str=REPLACE(@str,'6','6')
    	set @str=REPLACE(@str,'7','7')
    	set @str=REPLACE(@str,'8','8')
    	set @str=REPLACE(@str,'9','9')
    	
    	set @sum=dbo.Get_StrArrayLength(@str,',')              --字符串数组个数
    	Set @project_id=dbo.Get_StrArrayStrOfIndex(@str,',',1) --项目代码
    	Set @inorout=dbo.Get_StrArrayStrOfIndex(@str,',',2)    --进店状态
    	Set @shop_id=dbo.Get_StrArrayStrOfIndex(@str,',',3)    --商店代号
    	If (@sum>2 and (@inorout=1 or @inorout=0))
    	begin
    		select @test=shop_id from shop where shop_id=@shop_id
    		If (@test=@shop_id)
    		Begin
    		If (@inorout=0) --离店
    		Begin
    			set @onduty=null
    			if (@sum>3)
    			begin
    				Set @onduty=dbo.Get_StrArrayStrOfIndex(@str,',',4)
    			End
    			update Msg_rightbox 
    			set inorout=@inorout,
    				onduty=@onduty,
    				Outtime=@time
    			where shop_id=@shop_id and inorout=1 and Inbox_id in
    			(select id from Msg_Inbox where Sender=@sender)
    		End	
    		Else
    		Begin --进店
    			Set @class1=null
    			Set @class2=null
    			Set @class3=null
    			If (@sum>3)
    			Begin
    				set @class1=dbo.Get_StrArrayStrOfIndex(@str,',',4) --品类代码1
    			End
    			If (@sum>4)
    			Begin
    				set @class2=dbo.Get_StrArrayStrOfIndex(@str,',',5) --品类代码2
    			End
    			If (@sum>5)
    			Begin
    				set @class3=dbo.Get_StrArrayStrOfIndex(@str,',',6) --品类代码3
    			End
    			
    			
    			insert into Msg_rightbox 
    			(inbox_id,project_id,inorout,shop_id,class1_id,class2_id,class3_id,Intime) 
    			values(@inbox_id,@project_id,@inorout,@shop_id,@class1,@class2,@class3,@time)
    		End
    		end
    		else --****店号错误****
    		begin
    		exec dbo.Sendtipmsg @sender
    		INSERT INTO Msg_wrongbox SELECT * FROM inserted
    		delete from MSG_Inbox where id=@inbox_id
    		end
    	end --****进店状态和或不完整错误****
    	else
    	Begin
    		exec dbo.Sendtipmsg @sender
    		INSERT INTO Msg_wrongbox SELECT * FROM inserted
    		delete from MSG_Inbox where id=@inbox_id
    	End
     END TRY
     BEGIN CATCH --****其他错误****
    	--==发送错误提示短信==
    	exec dbo.Sendtipmsg @sender
    	--==复制短信到WrongBox==
    	INSERT INTO Msg_wrongbox SELECT * FROM inserted
    	delete from MSG_Inbox where id=@inbox_id
     END CATCH
    GO


     

    展开全文
  • SQL创建触发器:如何将两张表的数据同步更新
  • MySQL的触发器使用实例: 解决 触发器被触发后,向表里插入数据时判断该条记录是否存在,如果存在则...用简单的手动建表的办法,创建两个表。我用这两个表来介绍触发器该怎么使用。 操作表(触发器所在的表): tab...

    MySQL的触发器使用实例:

    解决   触发器被触发后,向表里插入数据时判断该条记录是否存在,如果存在则更新,不存在则插入 的问题

    首先声明一下 mysql  中写的sql执行语句全部在  begin     end;  之间。写在begin end;外面的sql语句无法执行。

    用简单的手动建表的办法,创建两个表。我用这两个表来介绍触发器该怎么使用。

    操作表(触发器所在的表):  table                 执行表(相应触发器的表):   table1                 

    删除触发器(delete) : 在 table 表中删除一条数据的时候,删除触发器(delete)被触发,它需要在 table1 表中插入主键,以及其它字段属性,    因为两个表的主键是一致的,所以 在 table1 中插入数据的时候,如果 已经有主键了,那么就会出现无法插入的动作,所以我们需要判断 table1 表中是否已经有该主键,如果有那么只进行字段的更新,如果没有再进行插入动作。 

    SQL判断 语句在触发器中的实现:  定义的 id 是主键

    BEGIN
      -- SQL语句 定义变量
      SET @id=OLD.id,@name=OLD.name,@image=OLD.image,@A=0;  --在触发器中定义接收变量,用@标识接收变量。  
    
       if (SELECT COUNT(*) AS nums FROM table1 WHERE id=old.id)=0  --判断table1中是否有table表传过来相同的主键。
       then
    --如果table1中没有与传过来相同的主键,那么插入这条数据
        insert into table1(id,name,image,bz) values(@id,@name,MD5(@id+@name),@A);
    
      else
    --如果table1中有相同的主键,那么更新这条数据。
        update table1 set name = @name,image=MD5(@id+@name),bz=@A  where id = old.id;
    --结束判断
        end if;
    
    END;

    MD5(消息摘要算法): 在触发器中是一个负责加密的函数,就好像指纹锁一样,相同的两个数据 用MD5加密 的 hash值也是相同的。MD5可以为文件加密。

    解释一下  @id=OLD.id ,这里@id 是用来接收 OLD.id 的值, 而OLD.id 表示的是 table 表中数据删除之前的id属性值。

    与  OLD  对应的  是 NEW, 如果是  更新触发器 你会用到 NEW 属性, 比如执行更新动作, OLD.id表示的是数据还未更新前的id值,而 NEW.id  则表示的是 数据更新后的 id 值。

    举一个  更新触发器(update)含NEW的例子:(逻辑跟上面的一致)  还是 定义 id 是主键

    BEGIN
    SET @A = 2;
      set @id=new.id,@name=new.name;
       if (SELECT COUNT(*) AS nums FROM table1 WHERE id=new.id)=0 then
       insert into table1(id,name,image,bz) values (@id,@name,new.image,@A);
      else
      update table1 set name =@name,image=new.image,bz=@A  where id = @id;
      end if;
    END;

     

    展开全文
  • sql创建触发器,避免死循环

    千次阅读 2018-03-06 11:01:54
    分别为两张表创建触发器,这样就会出现,两个触发器会陷入死循环,处理方法如下: CREATE TABLE [T_users]( [yhbm] [varchar](20) NOT NULL, [pwd] [varchar](20) NULL)CREATE TABLE [dbo]...
    两张用户表,修改其中一张表a的密码字段,另一张表b也同时更新字段。
    同理的,修改表b的密码字段,另一张表a也同时更新字段。
    分别为两张表创建触发器,这样就会出现,两个触发器会陷入死循环,处理方法如下:
     CREATE TABLE [T_users]( 
    	[yhbm] [varchar](20) NOT NULL,
    	[pwd] [varchar](20) NULL)
    CREATE TABLE [dbo].[tUsers]( 
    	[usersName] [varchar](50) NOT NULL,
    	[usersPwd] [varchar](50) NOT NULL)  
    CREATE Trigger [dbo].[truUser2]
            On   [dbo].[tUsers]                --在tuser表中创建触发器 
           for Update                          --为什么事件触发 
         As                                        --事件触发后所要做的事情 
           if Update(usersPwd)            
           begin 
           
           
       ALTER TABLE T_users DISABLE TRIGGER [truUser]  ---关闭T_users的触发器
       
             Update   dbo.T_users
               Set pwd=i.usersPwd
               From dbo.T_users  br , Deleted d ,Inserted i      --Deleted和Inserted临时表 
               Where br.yhbm=d. usersName
    
          
       ALTER TABLE T_users ENABLE TRIGGER [truUser]
    
           end      
    ALTER Trigger [dbo].[truUser]
           On   [dbo].[T_users]                --在tuser表中创建触发器 
           for Update                          --为什么事件触发 
         As                                        --事件触发后所要做的事情 
           if Update(pwd)            
           begin 
           
            ALTER TABLE tUsers DISABLE TRIGGER [truUser2]     --关闭tUsers表中的触发器
     
    
             Update  dbo.tUsers   
               Set usersPwd=i.pwd 
               From dbo.tUsers  br , Deleted d ,Inserted i      --Deleted和Inserted临时表 
               Where br.usersName=d.yhbm  
             
             ALTER TABLE tUsers ENABLE TRIGGER [truUser2]
             
           end    



    展开全文
  • SQL创建触发器的通用语法

    千次阅读 2014-08-19 20:07:14
    创建触发器的通用语法如下所示: CREATE [OR REPLACE] TRIGGER Trigger_name {BEFORE |AFTER} Triggering_event ON table_name [FOR EACH ROW] [FOLLOWS another_trigger] [ENABLE/DISABLE] [WHEN condition...
  • ---假设在SQL SERVER 2005里面有一张表,其中有两个字段需要做唯一性约束, ---不能有重复值,但是允许其为空值,如果都是空值,则允许重复 CREATE TRIGGER [dbo].[insert] ON [dbo].[table1] INSTEAD OF INSERT...
  • SQL Server 触发器

    万次阅读 多人点赞 2019-05-27 23:29:27
    SQL Server 触发器
  • sql sever 创建触发器

    2019-02-01 10:37:24
    sql sever如何创建触发器: 表一:![图片说明](https://img-ask.csdn.net/upload/201902/01/1548988192_879190.png) 表二:![图片说明](https://img-ask.csdn.net/upload/201902/01/1548988215_530449.png) ...
  • sqlserver创建触发器

    千次阅读 2020-04-08 13:05:31
    创建触发器/存储过程的使用 (1)触发器的使用 ①在数据表“学生”中创建update触发器,级联更新“选课”表相应的记录。 ②利用Delete表,将“学生”表中被删除的记录存储到“学生备份”表中,以供日后的数据查询和...
  • SQL server创建触发器实现级联删除
  • 这里写自定义目录标题前言触发器的定义触发器的作用触发器的优点触发器的缺点触发器的分类DML触发器DDL触发器登录触发器触发器的种类after...-SQL语句来增删查改触发器创建触发器删除触发器查询触发器修改触发器...
  • SQL Server触发器创建

    2020-05-20 16:02:50
    SQL Server触发器的总结 概念 触发器是一种专用类型的存储过程,它被捆绑到SQL Server 的表格或者视图上。 类型 有instead of和after两种触发器。例如,如果有一个用于TableA的instead of-update触发器,同时对这个...
  • SQLSERVER创建触发器

    2015-06-16 17:38:05
    /*创建断言*/ CREATE ASSERTION a_tb_user CHECK (SELECT COUNT(*) FROM tb_user ) .../*创建触发器*/ CREATE TRIGGER t_tb_user BEFORE INSERT ON tb_user REFERENCING NEWROW AS newUser FOR EA
  • sqlserver创建触发器更新表的内容创建update触发器具体思路 创建update触发器 最近工作中遇到一个小问题,需要创建触发器实现表中数据的更新操作。具体就是:当A表中某一列中的值发生改变时,依据条件更新另一列的值...
  • SQL动态创建触发器

    2020-03-14 10:16:41
    IF NOT EXISTS ( SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'delpoints') AND OBJECTPROPERTY(OBJECT_ID('delpoints'), N'IsTrigger') = 1 )...
  • 创建SqlServer数据库触发器脚本范例,方便大家用sql创建触发器,学习sqlserver的朋友可以参考下。
  • SQL创建触发器 

    2009-05-31 11:22:00
    创建触发器以前必须考虑到以下几个方面: CREATE TRIGGER 语句必须是批处理的第一个语句; 表的所有者具有创建触发器的缺省权限,表的所有者不能把该权限传给其它用户; 触发器是数据库对象,所以其命名必须符合命名...
  • 教程贴士:本教程为大家介绍SQL Server触发器创建、删除、修改、查看方法。  一:触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活。所以触发器可以...
  • SQL Server 创建触发器(trigger)

    千次阅读 2018-07-11 15:33:41
    触发器简介:触发器是一种特殊的存储过程,它的执行不是由程序调用,也不是手动执行,而是由事件来触发。触发器是当对某一个表进行操作。例如:update、insert、delete这些操作的时候,系统会自动调用执行该表上对应...
  • SQL语句创建触发器

    2017-08-28 16:15:00
    --假设XSCJ数据库中增加一新表XS_HIS,表结构和...创建一个触发器,当XS表被删除一行,把删除的记录写到日--志表XS_HIS中。 CREATE OR REPLACE TRIGGER del_xs BEFORE DELETE ON XS FOR EACH ROW BEGIN INS...
  • SQL Server创建触发器

    2014-03-18 22:59:10
    为什么需要触发器 为什么需要触发器(TRIGGER)呢?典型的应用就是银行的取款机系统 假定该系统的数据库设计需要两张表:帐户信息表(bank)存放帐户的信息,交易信息表(transInfo)存放每次的交易信息。   上述...
  • sqlserver 触发器

    千次阅读 2019-01-15 13:47:09
    sqlserver 触发器 &amp;...何为触发器?... 在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。... SQL Server为每个触发器创建了两个专用表:I...
  • 和同学数据库工具版本都一样,但是创建触发器显示1064 delimiter $$ CREATE TRIGGER trigee AFTER DELETE ON students FOR EACH ROW BEGIN INSERT INTO student ( xh, xm, upwd, xb, dh, jg,de)VALUES( old.xh, ...
  • Sqlserver 触发器

    2019-11-05 09:24:07
    Sqlserver触发器 触发器是在对数据表新增修改和删除的时候进行一次自定义事件的处理 就是比如为新增一条数据的时候自动触发一个事件来验证这个数据在别的表的关系 不然还得在应用里增加逻辑 数据库可以用触发器来...
  • SQL SERVER触发器

    2018-10-31 18:45:46
    sqlserver触发器详解 –触发器是一系列的T-SQL编写完成,是一种特殊的存储过程, –触发器只能由数据库的特定事件来触发,所谓的的特定事件主要包括以下几种类型 (1)用户在指定的表或视图中进行DML操作 INSERT 操作...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 96,026
精华内容 38,410
关键字:

sql创建触发器