精华内容
下载资源
问答
  • 用python创建一个最简单的触发器trigger 上面就是自己的创建效果了,点击之后会有对话框弹出来,这就是最简单的触发器原理了。 trigger就是触发器,触发器主要是通过事件进行触发而被执行的工具。 当然需要先pip ...

    用python创建一个最简单的触发器trigger
    创建的触发器
    上面就是自己的创建效果了,点击之后会有对话框弹出来,这就是最简单的触发器原理了。
    trigger就是触发器,触发器主要是通过事件进行触发而被执行的工具。
    当然需要先pip install tkinter
    当然了这个界面弹窗内容特是可以任意地修改的,具体看你用它来做什么了。

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    import tkinter as tk
    import tkinter.messagebox#也要导入messagebox属性,这个容易忽视
    top=tk.Tk()
    def helloCallBack():#定义函数
    	tk.messagebox.showinfo("Hello Python","Hello World")
    
    B=tk.Button(top,text="点我",command=helloCallBack)#这里是核心对象
    B.pack()
    top.mainloop()
    

    复制了代码之后,别忘点个赞在走哦,这样博主才更有动力开放其它的源码哦

    万水千山总是情,给个关注行不行?

    展开全文
  • SQL Server 创建触发器(trigger

    千次阅读 2018-07-11 15:33:41
    触发器是当对某一个表进行操作。例如:update、insert、delete这些操作的时候,系统会自动调用执行该表上对应的触发器。触发器分类:1、DML( 数据操纵语言 Data Manipulation Language)触发器:是指触发器在...

    触发器简介:

    触发器是一种特殊的存储过程,它的执行不是由程序调用,也不是手动执行,而是由事件来触发。触发器是当对某一个表进行操作。例如:update、insert、delete这些操作的时候,系统会自动调用执行该表上对应的触发器。

    触发器分类:

    1、DML( 数据操纵语言 Data Manipulation Language)触发器:是指触发器在数据库中发生 DML 事件时将启用。DML事件是指在表或视图中对数据进行的 insert、update、delete 操作的语句。

    2、DDL(数据定义语言 Data Definition Language)触发器:是指当服务器或数据库中发生 DDL 事件时将启用。DDL事件是指在表或索引中的 create、alter、drop 操作语句。

    3、登陆触发器:是指当用户登录 SQL SERVER 实例建立会话时触发。如果身份验证失败,登录触发器不会触发。

    其中 DML 触发器比较常用,根据 DML 触发器触发的方式不同又分为以下两种情况:

    after 触发器(之后触发):其中 after 触发器要求只有执行 insert、update、delete 某一操作之后触发器才会被触发,且只能定义在表上。

    instead of 触发器 (之前触发):instead of 触发器并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身。可以在表或视图上定义 instead of 触发器。

    DML 触发器有两个特殊的表:插入表(instered)和删除表(deleted),这两张表是逻辑表。这两个表是建立在数据库服务器的内存中,而且两张表的都是只读的。这两张表的结构和触发器所在的数据表的结构是一样的。当触发器完成工作后,这两张表就会被删除。Inserted 表的数据是插入或是修改后的数据,而 deleted 表的数据是更新前的或是已删除的数据。

    AFTER 触发器语法:

    复制代码
     1 CREATE [ OR ALTER ] TRIGGER [ schema_name . ]trigger_name   
     2 ON { table }   
     3 [ WITH <dml_trigger_option> [ ,...n ] ]  
     4 { FOR | AFTER }   
     5 { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }   
     6 AS { sql_statement  [ ; ] [ ,...n ] }  
     7 
     8 <dml_trigger_option> ::=  
     9     [ NATIVE_COMPILATION ]  
    10     [ SCHEMABINDING ]  
    11     [ EXECUTE AS Clause ]
    复制代码

    INSTEAD OF 触发器语法:

    复制代码
     1 CREATE [ OR ALTER ] TRIGGER [ schema_name . ]trigger_name   
     2 ON { table | view }   
     3 [ WITH <dml_trigger_option> [ ,...n ] ]  
     4 { FOR | AFTER | INSTEAD OF }   
     5 { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }   
     6 [ WITH APPEND ]  
     7 [ NOT FOR REPLICATION ]   
     8 AS { sql_statement  [ ; ] [ ,...n ] | EXTERNAL NAME <method specifier [ ; ] > }  
     9 
    10 <dml_trigger_option> ::=  
    11     [ ENCRYPTION ]  
    12     [ EXECUTE AS Clause ]  
    13 
    14 <method_specifier> ::=  
    15     assembly_name.class_name.method_name  
    复制代码

    DDL 触发器语法:

    复制代码
    1 CREATE [ OR ALTER ] TRIGGER trigger_name   
    2 ON { ALL SERVER | DATABASE }   
    3 [ WITH <ddl_trigger_option> [ ,...n ] ]  
    4 { FOR | AFTER } { event_type | event_group } [ ,...n ]  
    5 AS { sql_statement  [ ; ] [ ,...n ] | EXTERNAL NAME < method specifier >  [ ; ] }  
    6 
    7 <ddl_trigger_option> ::=  
    8     [ ENCRYPTION ]  
    9     [ EXECUTE AS Clause ]  
    复制代码

    登陆触发器语法:

    复制代码
    1 CREATE [ OR ALTER ] TRIGGER trigger_name   
    2 ON ALL SERVER   
    3 [ WITH <logon_trigger_option> [ ,...n ] ]  
    4 { FOR| AFTER } LOGON    
    5 AS { sql_statement  [ ; ] [ ,...n ] | EXTERNAL NAME < method specifier >  [ ; ] }  
    6 
    7 <logon_trigger_option> ::=  
    8     [ ENCRYPTION ]  
    9     [ EXECUTE AS Clause ]  
    复制代码

    参数:

    CREATE OR ALTER:

    创建或者有条件的修改触发器(即要修改的触发器必须已经存在)。

    schema_name:
    DML触发器所属的模式的名称(即所有者,例如:dbo)。

    trigger_name:
    是触发器的名称。

    table | view:

    是执行 DML 触发器的表或视图,有时称为触发器表或触发器视图。指定表格或视图的完全限定名称是可选的。视图只能由 INSTEAD OF 触发器引用。

    DATABASE:
    将 DDL 触发器的范围应用于当前数据库。如果指定,触发器会在当前数据库中发生 event_type 或 event_group 时触发。

    ALL SERVER:

    将 DDL 或登录触发器的作用域应用于当前服务器。如果指定,触发器会在当前服务器的任何地方发生 event_type 或 event_group 时触发。

    WITH ENCRYPTION:

    加密 CREATE TRIGGER 语句的文本。使用 WITH ENCRYPTION 可以防止触发器作为 SQL Server 复制的一部分进行发布。无法为 CLR 触发器指定 WITH ENCRYPTION。

    EXECUTE AS:
    指定执行触发器的安全上下文。以便能够控制 SQL Server 实例用于验证触发器引用的任何数据库对象的权限的用户帐户。

    NATIVE_COMPILATION:
    表示触发器是本地编译的。

    SCHEMABINDING:
    指定触发器引用的表不能被删除或更改。

    FOR | AFTER:
    AFTER 指定仅在触发 SQL 语句中指定的所有操作成功执行时触发 DML 触发器。所有引用级联操作和约束检查在此触发器触发之前也必须成功。当 FOR 是指定的唯一关键字时,AFTER 是默认值。视图无法定义AFTER触发器。

    INSTEAD OF:
    指定执行 DML 触发器而不是触发 SQL 语句,因此覆盖触发语句的操作。无法为 DDL 或登录触发器指定 INSTEAD OF。

    对于 INSTEAD OF 触发器,在具有指定级联动作 ON DELETE 的引用关系的表上不允许使用 DELETE 选项。类似地,在具有指定级联动作 ON UPDATE 的引用关系的表上,不允许 UPDATE 选项。

    {[DELETE] [,] [INSERT] [,] [UPDATE]} :
    指定在针对此表或视图进行尝试时激活 DML 触发器的数据修改语句。必须至少指定一个选项。在触发器定义中允许以任何顺序对这些选项进行任意组合。

    event_type:
    是执行后导致 DDL 触发器触发的 Transact-SQL 语言事件的名称。

    event_group:
    是 Transact-SQL 语言事件的预定义分组的名称。属于任何 Transact-SQL 语言事件执行后的 DDL 触发器触发 event_group。

    sql_statement:
    是触发条件和动作。触发条件指定附加条件,以确定尝试的 DML,DDL 或登录事件是否导致执行触发器操作。

    <method_specifier>:

    对于 CLR 触发器,指定要与触发器绑定的程序集的方法。该方法不得不引用任何参数并返回 void。class_name 必须是有效的 SQL Server 标识符,并且必须作为具有程序集可见性的程序集中的类存在。

     

    以下是DML触发器的使用,先看看示例数据:

     

    insert 触发器:

    复制代码
     1 if(OBJECT_ID('trigger_Stu_Insert') is not null)        -- 判断名为 trigger_Stu_Insert 的触发器是否存在
     2 drop trigger trigger_Stu_Insert        -- 删除触发器
     3 go
     4 create trigger trigger_Stu_Insert
     5 on Student        -- 指定创建触发器的表
     6 for insert        -- insert 触发器,也可以写为 after insert
     7 as
     8 
     9 declare @C_Id    int
    10 declare @S_Id    int
    11 
    12 select @C_Id=C_Id from Course where C_Name='SQL'    -- 获取课程为 SQL 的ID
    13 select @S_Id=S_Id from inserted        --插入一条学生的数据,那么这条数据就存在 inserted 这个表中
    14 
    15 select @C_Id
    16 select @S_Id
    17 
    18 select * from inserted
    19 
    20 update Student set C_S_Id=@C_Id where S_Id=@S_Id
    21 go
    22 
    23 insert into Student(S_StuNo,S_Name,S_Sex,S_Height,S_BirthDate)
    24 values('016','大熊','','210','2017-01-01')
    25 
    26 select * from Student
    27 select * from Course
    复制代码

    这个例子是:当 Student 表新增一条数据时,修改这条数据的课程ID。

    delete 触发器:

    复制代码
     1 if(OBJECT_ID('trigger_Stu_Delete') is not null)        -- 判断名为 trigger_Stu_Delete 的触发器是否存在
     2 drop trigger trigger_Stu_Delete        -- 删除触发器
     3 go
     4 create trigger trigger_Stu_Delete
     5 on Student        -- 指定创建触发器的表
     6 for delete        -- delete 触发器,也可以写为 after delete
     7 as
     8 
     9 declare @C_S_Id    int
    10 
    11 select @C_S_Id=C_S_Id from deleted        --删除的学生的数据就存在 deleted 这个表中
    12 
    13 select @C_S_Id
    14 
    15 select * from deleted
    16 
    17 delete from Course where C_Id=@C_S_Id        -- 删除具有删除的学生的课程ID的课程
    18 go
    19 
    20 delete from Student where C_S_Id='1'
    21 
    22 select * from Student
    23 select * from Course
    复制代码

    这个例子是:删除指定课程ID的学生时,并删除指定课程ID的课程。

    update 触发器:

    复制代码
     1 if(OBJECT_ID('trigger_Cou_Update') is not null)        -- 判断名为 trigger_Cou_Update 的触发器是否存在
     2 drop trigger trigger_Cou_Update        -- 删除触发器
     3 go
     4 create trigger trigger_Cou_Update
     5 on Course        -- 指定创建触发器的表
     6 for update        -- update 触发器,也可以写为 after update
     7 as
     8 
     9 declare @C_Id    int
    10 
    11 select @C_Id=C_Id from deleted        
    12 
    13 select * from deleted        -- 修改前的数据就存在 deleted 这个表中
    14 
    15 select * from inserted        -- 修改后的数据就存在 inserted 这个表中
    16 
    17 update Student set C_S_Id=@C_Id where C_S_Id is null 
    18 go
    19 
    20 update Course set C_Name='C#' where C_Id='4'
    21 
    22 select * from Student
    23 select * from Course
    复制代码

    这个例子是:修改课程名称时,把课程ID为空(null)的学生的课程ID默认为修改的课程ID。

    禁止修改学生学号触发器,触发器进行数据回滚:

    复制代码
     1 if(OBJECT_ID('trigger_Stu_Update') is not null)        -- 判断名为 trigger_Stu_Update 的触发器是否存在
     2 drop trigger trigger_Stu_Update        -- 删除触发器
     3 go
     4 create trigger trigger_Stu_Update
     5 on Student        -- 指定创建触发器的表
     6 for update        -- update 触发器,也可以写为 after update
     7 as
     8 begin try
     9     if(UPDATE(S_StuNo))        -- 列级触发器:判断是否更新了学生学号(学号不允许更改)
    10     begin
    11         raiserror(66666,16,1)
    12     end
    13 end try
    14 begin catch
    15     select * from deleted        -- 修改前的数据就存在 deleted 这个表中
    16     select * from inserted        -- 修改后的数据就存在 inserted 这个表中
    17     rollback tran;
    18 end catch
    19 go
    20 
    21 update  Student set S_StuNo='006' where S_Id='20'
    22 
    23 select * from Student
    复制代码

    after 触发器可以指定多个操作都可以触发该触发器。只需要在 for/after 后面添加逗号和触发器的类型,例如:

    1 for update,insert,delete 
    2 
    3 after update,insert,delete 

    instead of 触发器:

    这个触发器就好玩了,下面先看看数据。

    复制代码
     1 if(OBJECT_ID('trigger_Stu_InsteadOf') is not null)        -- 判断名为 trigger_Stu_InsteadOf 的触发器是否存在
     2 drop trigger trigger_Stu_InsteadOf        -- 删除触发器
     3 go
     4 create trigger trigger_Stu_InsteadOf
     5 on Student        -- 指定创建触发器的表
     6 instead of update,insert,delete         -- instead of 触发器
     7 as
     8     select * from deleted        -- 修改前的数据就存在 deleted 这个表中
     9     select * from inserted        -- 修改后的数据就存在 inserted 这个表中
    10 go
    11 
    12 update Student set S_StuNo='006' where S_Id='20'
    13 
    14 insert into Student([S_StuNo],[S_Name],[S_Sex],[S_Height],[S_BirthDate])
    15 values('017','清红','','180','2017-01-01')
    16 
    17 delete from Student where C_S_Id='5'
    18 
    19 select * from Student
    复制代码

    执行上面的语句之后,咦,数据怎么一点变化都没有?看看上面的介绍。instead of 触发器是之前触发。

    instead of 触发器并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身,并且会覆盖触发语句的操作,即 after 触发器 T-SQL 语句的操作,很明显我们上面定义的表 Student 的 after 触发器也没有效果了,现在理解了这句话了吧。

    修改触发器:

    复制代码
     1 alter trigger trigger_Stu_InsteadOf        -- 修改触发器
     2 on Student        -- 指定创建触发器的表
     3 instead of update,insert,delete         -- instead of 触发器
     4 as
     5     declare @Count1 int
     6     declare @Count2 int
     7 
     8     select @Count1=COUNT(1) from deleted        
     9     select @Count2=COUNT(1) from inserted        
    10 
    11     if(@Count1>0 and @Count2>0)
    12     begin
    13         select 'update操作'
    14     end
    15     else if(@Count1>0)
    16     begin
    17         select 'delete操作'
    18     end
    19     else if(@Count2>0)
    20     begin
    21         select 'insert操作'
    22     end
    23 go
    24 
    25 update Student set S_StuNo='006' where S_Id='20'
    26 
    27 insert into Student([S_StuNo],[S_Name],[S_Sex],[S_Height],[S_BirthDate])
    28 values('017','清红','','180','2017-01-01')
    29 
    30 delete from Student where C_S_Id='5'
    31 
    32 select * from Student
    复制代码

    启用/禁用触发器:

    1 --禁用触发器
    2 disable trigger trigger_Stu_InsteadOf on Student;    -- trigger_Stu_InsteadOf 触发器名称
    3 --启用触发器
    4 enable trigger trigger_Stu_InsteadOf on Student;    -- trigger_Stu_InsteadOf 触发器名称

    查询已存在的触发器:

    1 -- 查询已存在的触发器
    2 select * from sys.triggers;
    3 select * from sys.objects where type = 'TR';
    4 select * from sysobjects where xtype='TR'
    复制代码
     1 -- sys.trigger_events 触发器事件对象视图
     2 select * from sys.trigger_events 
     3 
     4 -- 查看触发器触发事件对象    
     5 select a.type_desc,b.* from sys.trigger_events a 
     6 inner join sys.triggers b on a.object_id = b.object_id
     7 where b.name = 'trigger_Stu_Insert';
     8 
     9 -- 查询创建触发器的 T-SQL 文本
    10 exec sp_helptext 'trigger_Stu_Insert'
    复制代码
    展开全文
  • 触发器的知识点: PostgreSQL在以下情况下执行/调用触发器:在尝试操作之前(在检查约束并尝试INSERT,UPDATE或DELETE之前)。...对于操作修改的每一行,都会调用一个标记为FOR EACH ROWS的触发器...

    触发器的知识点: 

    1. PostgreSQL在以下情况下执行/调用触发器:在尝试操作之前(在检查约束并尝试INSERTUPDATEDELETE之前)。或者在操作完成后(在检查约束并且INSERTUPDATEDELETE完成后)。或者不是操作(在视图中INSERTUPDATEDELETE的情况下)

    2. 对于操作修改的每一行,都会调用一个标记为FOR EACH ROWS的触发器。 另一方面,标记为FOR EACH STATEMENT的触发器只对任何给定的操作执行一次,而不管它修改多少行。

    3. 您可以为同一事件定义同一类型的多个触发器,但条件是按名称按字母顺序触发。

    4. 当与它们相关联的表被删除时,触发器被自动删除。

     

    step1:  创建记录日志表, 跟踪记录表上的所有操作

      create table auditlog
           (
                operation varchar(100),
                id int,
                productname varchar(100),
                catagoryid int,
               subcatagoryid int,
               operationdate timestamp without time zone
            )

     

    step2:  创建触发器相关的存储过程

    CREATE FUNCTION public.auditinsertfunlog()
        RETURNS trigger
        LANGUAGE 'plpgsql'
        COST 100
        VOLATILE NOT LEAKPROOF
        ROWS 0
    AS $BODY$

    begin
     insert into auditlog (operation,id,productname,catagoryid,subcatagoryid,operationdate)
        values('insert',new.id,new."productName",new."catagoryID",new."subcatagoryID",current_timestamp);
        return new;
    end;

    $BODY$;

    ALTER FUNCTION public.auditinsertfunlog()
        OWNER TO postgres;

     

    step3: 创建触发器

        CREATE TRIGGER products_insert_trigger
        AFTER INSERT ON public."Products"
        FOR EACH ROW EXECUTE PROCEDURE public.auditinsertfunlog();

     

      

     

    转载于:https://www.cnblogs.com/yuzg/p/9081477.html

    展开全文
  • 13、创建触发器(CREATE TRIGGER

    千次阅读 2020-10-17 17:31:20
    在 MySQL 5.7 中,可以使用 CREATE TRIGGER 语句创建触发器。 语法格式如下: CREATE <触发器名> < BEFORE | AFTER > <INSERT | UPDATE | DELETE > ON <表名> FOR EACH Row<触发器主体&...

    触发器是与 MySQL 数据表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。

    基本语法

    在 MySQL 5.7 中,可以使用 CREATE TRIGGER 语句创建触发器。

    语法格式如下:

    CREATE <触发器名> < BEFORE | AFTER >
    <INSERT | UPDATE | DELETE >
    ON <表名> FOR EACH Row<触发器主体>
    

    语法说明如下。
    1) 触发器名
    触发器的名称,触发器在当前数据库中必须具有唯一的名称。如果要在某个特定数据库中创建,名称前面应该加上数据库的名称。

    2) INSERT | UPDATE | DELETE
    触发事件,用于指定激活触发器的语句的种类。

    注意:三种触发器的执行时间如下。
    INSERT:将新行插入表时激活触发器。例如,INSERT 的 BEFORE 触发器不仅能被 MySQL 的 INSERT 语句激活,也能被 LOAD DATA 语句激活。
    DELETE: 从表中删除某一行数据时激活触发器,例如 DELETE 和 REPLACE 语句。
    UPDATE:更改表中某一行数据时激活触发器,例如 UPDATE 语句。

    3) BEFORE | AFTER
    BEFORE 和 AFTER,触发器被触发的时刻,表示触发器是在激活它的语句之前或之后触发。若希望验证新数据是否满足条件,则使用 BEFORE 选项;若希望在激活触发器的语句执行之后完成几个或更多的改变,则通常使用 AFTER 选项。

    4) 表名
    与触发器相关联的表名,此表必须是永久性表,不能将触发器与临时表或视图关联起来。在该表上触发事件发生时才会激活触发器。同一个表不能拥有两个具有相同触发时刻和事件的触发器。例如,对于一张数据表,不能同时有两个 BEFORE UPDATE 触发器,但可以有一个 BEFORE UPDATE 触发器和一个 BEFORE INSERT 触发器,或一个 BEFORE UPDATE 触发器和一个 AFTER UPDATE 触发器。

    5) 触发器主体
    触发器动作主体,包含触发器激活时将要执行的 MySQL 语句。如果要执行多个语句,可使用 BEGIN…END 复合语句结构。

    6) FOR EACH ROW
    一般是指行级触发,对于受触发事件影响的每一行都要激活触发器的动作。例如,使用 INSERT 语句向某个表中插入多行数据时,触发器会对每一行数据的插入都执行相应的触发器动作。

    注意:每个表都支持 INSERT、UPDATE 和 DELETE 的 BEFORE 与 AFTER,因此每个表最多支持 6
    个触发器。每个表的每个事件每次只允许有一个触发器。单一触发器不能与多个事件或多个表关联。

    另外,在 MySQL 中,若需要查看数据库中已有的触发器,则可以使用 SHOW TRIGGERS 语句。

    创建一个简单的触发器

    CREATE TRIGGER 触发器名称
    ON 表名
    FOR INSERTUPDATEDELETE
    AS
        T-SQL 语句
    

    注意:触发器名称是不加引号的。

    创建 BEFORE 类型触发器

    在 test_db 数据库中,数据表 tb_emp8 为员工信息表,包含 id、name、deptId 和 salary 字段,数据表 tb_emp8 的表结构如下所示。

    mysql> SELECT * FROM tb_emp8;
    Empty set (0.07 sec)
    mysql> DESC tb_emp8;
    +--------+-------------+------+-----+---------+-------+
    | Field  | Type        | Null | Key | Default | Extra |
    +--------+-------------+------+-----+---------+-------+
    | id     | int(11)     | NO   | PRI | NULL    |       |
    | name   | varchar(22) | YES  | UNI | NULL    |       |
    | deptId | int(11)     | NO   | MUL | NULL    |       |
    | salary | float       | YES  |     | 0       |       |
    +--------+-------------+------+-----+---------+-------+
    

    【实例 1】创建一个名为 SumOfSalary 的触发器,触发的条件是向数据表 tb_emp8 中插入数据之前,对新插入的 salary 字段值进行求和计算。输入的 SQL 语句和执行过程如下所示。

    mysql> CREATE TRIGGER SumOfSalary
        -> BEFORE INSERT ON tb_emp8
        -> FOR EACH ROW
        -> SET @sum=@sum+NEW.salary;
    

    触发器 SumOfSalary 创建完成之后,向表 tb_emp8 中插入记录时,定义的 sum 值由 0 变成了 1500,即插入值 1000 和 500 的和,如下所示。

    SET @sum=0;  设置sum为0
    
    mysql> INSERT INTO tb_emp8
        -> VALUES(1,'A',1,1000),(2,'B',1,500);   执行触发器,@sum加salary
    
    mysql> SELECT @sum;   触发器
    +------+
    | @sum |
    +------+
    | 1500 |
    +------+
    

    创建 AFTER 类型触发器

    在 test_db 数据库中,数据表 tb_emp6 和 tb_emp7 都为员工信息表,包含 id、name、deptId 和 salary 字段,数据表 tb_emp6 和 tb_emp7 的表结构如下所示。

    mysql> DESC tb_emp6;
    +--------+-------------+------+-----+---------+-------+
    | Field  | Type        | Null | Key | Default | Extra |
    +--------+-------------+------+-----+---------+-------+
    | id     | int(11)     | NO   | PRI | NULL    |       |
    | name   | varchar(25) | YES  |     | NULL    |       |
    | deptId | int(11)     | YES  | MUL | NULL    |       |
    | salary | float       | YES  |     | NULL    |       |
    +--------+-------------+------+-----+---------+-------+
    
    mysql> DESC tb_emp7;
    +--------+-------------+------+-----+---------+-------+
    | Field  | Type        | Null | Key | Default | Extra |
    +--------+-------------+------+-----+---------+-------+
    | id     | int(11)     | NO   | PRI | NULL    |       |
    | name   | varchar(25) | YES  |     | NULL    |       |
    | deptId | int(11)     | YES  |     | NULL    |       |
    | salary | float       | YES  |     | 0       |       |
    +--------+-------------+------+-----+---------+-------+
    

    【实例 2】创建一个名为 double_salary 的触发器,触发的条件是向数据表 tb_emp6 中插入数据之后,再向数据表 tb_emp7 中插入相同的数据,并且 salary 为 tb_emp6 中新插入的 salary 字段值的 2 倍。输入的 SQL 语句和执行过程如下所示。

    mysql> CREATE TRIGGER double_salary
        -> AFTER INSERT ON tb_emp6
        -> FOR EACH ROW
        -> INSERT INTO tb_emp7
        -> VALUES (NEW.id,NEW.name,deptId,2*NEW.salary);
    

    触发器 double_salary 创建完成之后,向表 tb_emp6 中插入记录时,同时向表 tb_emp7 中插入相同的记录,并且 salary 字段为 tb_emp6 中 salary 字段值的 2 倍,如下所示。

    mysql> INSERT INTO tb_emp6
        -> VALUES (1,'A',1,1000),(2,'B',1,500);
    
    mysql> SELECT * FROM tb_emp6;
    +----+------+--------+--------+
    | id | name | deptId | salary |
    +----+------+--------+--------+
    |  1 | A    |      1 |   1000 |
    |  2 | B    |      1 |    500 |
    +----+------+--------+--------+
    
    mysql> SELECT * FROM tb_emp7;
    +----+------+--------+--------+
    | id | name | deptId | salary |
    +----+------+--------+--------+
    |  1 | A    |      1 |   2000 |
    |  2 | B    |      1 |   1000 |
    +----+------+--------+--------+
    
    展开全文
  • Oracle中创建和使用触发器Trigger

    万次阅读 2018-07-08 15:47:37
    创建一个序列 create sequence s5 – 序列的名字 increment by 1 – 步长 start with 1 – 当前序列的初始化值 maxvalue 100 – 序列的最大值 minvalue 1 – 序列的最小值 nocycle – 序列达到最大值后是否...
  • oracle 触发器trigger 批量执行创建

    千次阅读 2020-03-10 10:19:52
    批量执行创建触发器时,只有当触发器后面加上“/”才可以执行下一个 例如create or replace trigger t_mould_trig before insert on t_mould --数据库表名 for each row declare begin select t_mould_seq.nextval ...
  • 1、创建sequence create sequence JEECG.SEQU_NT_PLFBGCSJB_ID minvalue 1 maxvalue 9999999999999999999999999999 start with 1 increment by 1 cache 20 order; 2、触发器trigger  create or replace trig
  • 这是对出色的的扩展,用于创建数据库触发器,以使最新转换在父模型的特定列上保持同步。 目前,它仅设计用于PostgreSQL。 安装 将此行添加到您的应用程序的Gemfile中: gem 'statesman-trigger' 然后执行: $ ...
  • Quartz一个Job绑定多个Trigger

    千次阅读 2017-10-16 16:53:00
    Code 1: JobDetail jobDetail = new JobDetail(jobName, jobGroup, class1.getClass()); // durable, 指明任务就算没有绑定Trigger仍保留在Quartz的JobStore中, jobDet...
  • 触发器Trigger定义、创建

    千次阅读 2019-09-09 16:37:16
    一、触发器的定义: 触发器(TRIGGER)是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句...例:创建一个trig_test触发器,该触发器在表t_book插入一条数据后,对表t_bookType的bookNum数量对应的bookTy...
  • 这个是本人在学习MySQL数据库时的一个小的总结,希望对大家有用。主要是关于如何在MySQL中创建procedure、function、trigger.
  • Quartz-Trigger详解

    万次阅读 2017-10-08 02:22:15
    通用 Trigger 属性 Priority 错过触发机制misfire instruction Calendar概述类似于 Job,Trigger 也非常容易使用,但是它包含了大量的自定义选项,你需要了解它们才能完全使用 Quartz。并且,Trigger 本身有很多不同...
  • SQLite创建触发器 CREATE TRIGGER

    千次阅读 2013-07-29 17:20:53
    CREATE TRIGGER sql-statement ::=CREATE[TEMP|TEMPORARY]TRIGGERtrigger-name[BEFORE|AFTER] database-eventON[database-name.]table-name trigger-actionsql-statement ::=CREATE[TEMP|TEMPORARY]...
  • 在DB2中创建一个触发器
  • #Oracle创建Database trigger 时 出现ORA-01031:权限不足# 创建编译on database 触发器时,出现ORA-01031提示权限不足,原因是创建数据库级触发器需要使用administrator database trigger的权限. 解决办法: grant...
  • 第十六篇 zabbix创建Trigger

    千次阅读 2016-11-21 18:00:03
    点击配置-》主机 选中主机中的触发器,点击右上角的创建触发器,每输入栏的属性下面都有介绍,点击添加,这里表达式中选择监控项时我就选择前面建好的自定义监控项get count from secumain,设置当当天更新的数据...
  • MySql创建一个删除的触发器

    千次阅读 2019-12-17 19:20:03
    使用MySqlWorkbench创建触发器的语法 DELIMITER| CREATE TRIGGER <触发器名> AFTER DELETE ON student FOR EACH ROW BEGIN ...上面是在学生表上建立一个触发器,当从学生表中删除一条记录时,会把...
  • SQLServer创建触发器执行语句时报错,'CREATE TRIGGER' 必须是查询批次中的第一个语句。解决方法: 将创建语句和删除语句分开执行
  • 查看创建trigger的语句

    2013-08-07 19:07:58
    在PLSQL DEV中没有权限查看TRIGGER时,可以用下面的SQL。select * from dba_triggers t where t.table_name = 'TABLE_NAME'; 显示的列有:OWNER TRIGGER_NAME TRIGGER_TYPE TRIGGER_EVENT TABLE_OWNER BASE_...
  • 我想在PowerDesigner9.5(下称PD)中创建一个Trigger对象,可以像表一样在生成数据库脚本时生成该Trigger创建代码,可我在PD中创建一个Trigger Item,然后把代码写在的该Trigger Item的Definition页,
  • 触发器

    千次阅读 2017-06-10 19:57:24
    eg:创建一个触发器,当学生表中的记录被更新时,显示表中的所有记录。 create trigger student_change on student after insert , update , delete as select * from student; eg:在...
  • 1、前阶段需要点击一个按钮然后触发另一个元素的点击事件,当时找了度娘,发现了trigger这个方法,哎,这么好用的方法我竟然之前不知道,至此记录一下; 2、trigger()方法: trigger()方法触发被选元素上指定的事件...
  • MySQL用户权限导致的创建Trigger失败

    千次阅读 2017-05-23 08:51:15
    说来惭愧,MySQL一直处于只会用,不怎么理解的阶段。甚至是一些较为深层次的管理,都不怎么熟悉,得加强啊! 近日,系统测试,使用MySQL... com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: TRIGGER c
  • PostgreSQL触发器(创建触发器

    千次阅读 2018-09-21 14:43:58
    触发器(Trigger)是种由事件自动触发执行的特殊的存储过程,这些事件是对表的插入、更新、删除等操作。  现在,创建学生表和成绩表。用触发器实现:当删除学生表中的条记录时,其在成绩表中的记录也被删除了...
  • 实现功能:mysql创建INSERT|UPDATE|DELETE触发器实现相同服务器下不同库的表数据同步。比如table1表的数据有insert|update|delete操作,便同步到sync表中。然后再根据sync表中state(同步状态)和oper(操作方式)...
  • terraform-sqs-lambda-trigger-example 有关如何在Terraform中创建由SQS触发的AWS Lambda的示例 注意:这取决于 用法 $ terraform apply $ aws sqs send-message --queue-url $(terraform output sqs_url) --...
  • 创建触发器 规范 CREATE TRIGGER trigger_name [BEFORE| AFTER | INSTEAD OF ] event ON table_name [ 触发器逻辑 ] 例子如下: CREATE TRIGGER one_trigger BEFORE insert ON school_table EXECUTE procedure ...
  • 触发器Trigger创建

    千次阅读 2007-09-20 10:23:00
    CREATE TRIGGER创建触发器,触发器是种特殊的存储过程,在用户试图对指定的表执行指定的数据修改语句时自动执行。Microsoft® SQL Server™ 允许为任何给定的 INSERT、UPDATE 或 DELETE 语句创建触发器。语法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 126,542
精华内容 50,616
关键字:

创建一个trigger