精华内容
下载资源
问答
  • python批量删除数据库触发器

    千次阅读 2013-09-15 20:15:33
    # coding=gbk import MySQLdb import os try:  conn=MySQLdb.connect(host='localhost',user='root',passwd='****',db='user',port=3306)  #打开连接 ... # 查询birthdayinfo表下的所有触发器


    # coding=gbk

    import MySQLdb
    import os
    try:
        conn=MySQLdb.connect(host='localhost',user='root',passwd='****',db='user',port=3306)
        #打开连接

        cur=conn.cursor()

       # 查询birthdayinfo表下的所有触发器

        cur.execute("select TRIGGER_NAME from information_schema.`TRIGGERS` WHERE EVENT_OBJECT_TABLE='birthdayinfo'")
        infos=cur.fetchall()
        for item in infos:
            s = str(item)
            #把查出来的形如 [('trg_birthdayinfo_ai',) 的触发器名称改为 trg_birthdayinfo_ai
            s=s[2:-3]
            sql = 'DROP TRIGGER  if EXISTS  '+s
            #print sql
            cur.execute(sql)
            print '删除['+str(item)+']触发器成功'
        cur.close()
        
        conn.close()
        print os.system('@pause')
    except MySQLdb.Error,e:
            print 'Mysql Error %d:%s' % (e.args[0],e.args[1])
    展开全文
  • mysql数据库触发器

    2019-06-02 11:36:53
    数据库触发器: 1.什么是数据库触发器

    数据库触发器:
    1.什么是数据库触发器?
    触发器:当对表进行insert、update、delete操作的时候,触发某个条件,执行一段程序,触发器是一个特殊的存储过程。

    2.如何创建触发器?
    语法:
    create trigger
    trigger_name trigger_time trigger_event
    on 表名
    for each row trigger_stmt

    备注:
    .trigger_name:标识触发器的名称,用户自定义;
    .trigger_time:触发时机,取值为—>before、after;
    .trigger_event:触发事件,取值为—>insert、update、delete;
    .trigger_stmt:触发程序体;

    *触发器语法规定:同一张表上不能建立2个相同的触发器,因此在一张表上最多建立:2x3=6个触发器,
    即----> before insert、before update、before delete
    after insert、 after update 、after delete

    3.触发器的查看、删除命令:
    ①.查看命令:show triggers;
    ②.删除命令: drop trigger trigger_name;

    展开全文
  • MySQL数据库触发器

    2021-06-02 21:21:22
    MySQL数据库触发器 前言 触发器是与表有关的数据库对象,指在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性 , 日志记录 , 数据...

    MySQL数据库触发器

    前言

    触发器是与表有关的数据库对象,指在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性 , 日志记录 , 数据校验等操作 。

    一、触发器的类型

    使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。
    在这里插入图片描述

    二、创建触发器

    1. 语法结构

    create trigger 触发器名称
    before/after insert/update/delete
    on 表名
    for each row -- 代码行级触发器
    begin
    执行sql语句(DML)
    end;
    

    2. 示例:通过触发器记录 emp 表的数据变更1日志 , 包含增加, 修改 , 删除 ;

    1.创建一张日志表

    create table emp_logs(
    id int(11) not null auto_increment primary key,
    operation varchar(20) not null, -- '操作类型, insert/update/delete'
    operate_time datetime not null, -- '操作时间'
    operate_id int(11) not null, -- '操作表的ID'
    operate_params varchar(500) -- '操作参数'
    )engine=innodb default charset=utf8;
    

    2.创建 insert 型触发器,完成插入数据时的日志记录 :

    delimiter $
    
    create trigger emp_logs_insert_trigger
    after insert
    on emp
    for each row
    begin
    insert into emp_logs (id,operation,operate_time,operate_id,operate_params)
    values(null,'insert',now(),new.id,concat('插入后(id:',new.id,', name:',new.name,',
    age:',new.age,', salary:',new.salary,')'));
    end $
    
    delimiter ;
    

    在这里插入图片描述
    在这里插入图片描述
    3.创建 update 型触发器,完成更新数据时的日志记录

    delimiter $
    
    create trigger emp_logs_update_trigger
    after update
    on emp
    for each row
    begin 
    insert into emp_logs (id,operation,operate_time,operate_id,operate_params)
    values(null,'update',now(),new.id,concat('修改前(id:',old.id,', name:',old.name,',
    age:',old.age,', salary:',old.salary,') , 修改后(id',new.id, 'name:',new.name,',
    age:',new.age,', salary:',new.salary,')'));
    end$
    
    delimiter ;
    

    在这里插入图片描述
    在这里插入图片描述
    4.创建delete 行的触发器 , 完成删除数据时的日志记录

    delimiter $
    
    create trigger emp_logs_delete_trigger
    after delete 
    on emp
    for each row
    begin
    insert into emp_logs (id,operation,operate_time,operate_id,operate_params)
    values(null,'delete',now(),old.id,concat('删除前(id:',old.id,', name:',old.name,',
    age:',old.age,', salary:',old.salary,')'));
    end$
    
    delimiter ;
    

    在这里插入图片描述
    在这里插入图片描述

    三、查看触发器

    select * from information_schema.triggers \G;
    
    select trigger_name from information_schema.triggers \G;
    

    在这里插入图片描述

    四、删除触发器

    drop trigger 触发器名;
    

    在这里插入图片描述

    展开全文
  • 数据库触发器是存储在数据字典中的一段代码,每当发生预定义的事件并满足预定义的条件时,它都会自动处理。 打个比方,我们想为所有工资超过100000的员工自动提高工作级别: ON UPDATE OF EMPLOYEE

    什么是Database trigger?

    数据库触发器是存储在数据字典中的一段代码,每当发生预定义的事件并满足预定义的条件时,它都会自动处理。
    打个比方,我们想为所有工资超过100000的员工自动提高工作级别:

    ON UPDATE OF EMPLOYEE.salary
    IF :NEW.salary > 100000 THEN
    IncreaseJobLevel(:NEW.enumber, :NEW.salary);
    END IF;
    

    例如,我们想实现一个数据安全规则,即工资不能在周末被修改。

    ON UPDATE OF EMPLOYEE.salary
    IF TO_CHAR(SYSDATE,'Day') IN ('Saturday', 'Sunday') THEN
    RAISE_APPLICATION_ERROR(-20001, 'Salary cannot be updated over a weekend !');
    END IF;
    

    例如,我们想要强制一个一致性约束,即一个部门不能有超过100名员工:

    ON INSERT INTO EMPLOYEE
    SELECT COUNT(*)
    INTO total_employees
    FROM EMPLOYEE
    WHERE dname = :NEW.dname;
    IF total_employees = 100 THEN
    RAISE_APPLICATION_ERROR(-20002, 'Too many employees in ' || :NEW.dname);
    END IF;
    

    在上面的例子中,我们假设一个触发器在INSERT语句之前被处发。
    有时,在修改关系表之后和COMMIT语句之前触发一个触发器来验证一致性约束更为方便

    这就是为什么我们有两个触发器的时间选项:BEFORE和 AFTER。

    主动数据库系统

    主动数据库系统是一种能够检测一定时间内发生的事件,并在对这些事件的响应中,如果在满足预定义条件时就进行执行动作的系统。
    主动数据库系统的逻辑实现为下面事件的集合:
    Event-Condition-Action (ECA)rules
    在SQL中,可以用CREATE触发器语句创建ECA规则,也可以用DROP触发器语句删除ECA规则

    CREATE OR REPLACE TRIGGER 语句可以实现ECA规则。
    举个例子:

    --event
    ON UPDATE OF EMPLOYEE.salary
    --condition
    IF :NEW.salary > 100000
    --action
    IncreaseJobLevel(:NEW.enumber, :NEW.salary);
    

    CREATE OR REPLACE TRIGGER 声明

    结合代码说明:

    CREATE OR REPLACE TRIGGER CheckBudget
    --时间的选择
    BEFORE
    --事件
    UPDATE OF budget ON DEPARTMENT
    --触发器的类型,可以是语句触发器,也可以是行触发器
    FOR EACH ROW -- FOR EACH ROW 意味着它是一个行触发器
    --条件
    WHEN NEW.name = 'Math' --NEW 被称作 pseudorecord
    --触发器的主体开始
    BEGIN
    --Pseudorecords :OLD and :NEW代表了一行被删除或修改之前和一行被修改或者插入之后
    IF NOT ( :NEW.budget BETWEEN 1 AND 7000 ) THEN
    --发器与触发该触发器的事务一起异常终止
    RAISE_APPLICATION_ERROR(-200001, 'Budget of department ' || :NEW.name ||
                                     ' cannot be equal to ' || :NEW.budget );
    
    --触发器的主体结束
    END IF;
    END;
    

    时间的选择有以下情况:
    BEFORE 触发器在触发事件之前触发。

    AFTER 触发器在触发事件后触发。

    INSTEAD OF 触发器触发而不是触发事件,它通常用于正确实现视图更新操作,即通过在关系视图上形成的更新来正确修改基本关系表。

    举例:

    --1
    BEFORE UPDATE OF budget ON DEPARTMENT
    --2
    AFTER DELETE OR UPDATE ON DEPARTMENT
    --3
    INSTEAD OF INSERT ON EMPVIEW
    

    Statement database trigger

    一个示例:

    CREATE OR REPLACE TRIGGER ModifyDepartment
    AFTER DELETE OR UPDATE ON DEPARTMENT
    BEGIN -- Statement triggers have no FOR EACH ROW clause!
    IF DELETING THEN
    INSERT INTO DEPTAUDIT VALUES('DELETE', SYSDATE);
    ELSIF UPDATING THEN
    INSERT INTO DEPTAUDIT VALUES('UPDATE', SYSDATE);
    END IF;
    END;
    

    Row database triggers

    行触发器既可以在触发事件影响关系表中的一行之后,也可以在触发事件之前。
    行触发器示例:

    CREATE OR REPLACE TRIGGER UpdateDepartment
    AFTER UPDATE ON DEPARTMENT
    FOR EACH ROW -- 行触发器必须包含FOR EACH ROW 
    WHEN (NEW.city = 'Boston')--仅用于行触发器!
    BEGIN
    INSERT INTO DEPTTRACE VALUES
                    ('UPDATE', SYSDATE, :NEW.name, :NEW.budget, :NEW.city,
                                        :OLD.name, :OLD.budget, :OLD.city );
    END;
    

    References

    1. T. Connoly, C. Begg, Database Systems, A Practical Approach to Design, Implementation, and Management, Chapter 8.3 Triggers, Pearson Education Ltd, 2015.
    展开全文
  • 数据库触发器

    2017-01-20 18:54:56
    触发器 MySQL数据库
  • 什么是数据库触发器

    千次阅读 2019-09-12 10:13:20
    什么是数据库触发器? 事件 AFTER触发器 INSTEAD OF触发器 特殊数据库对象 定义 用于触发器 复杂的审计 执行业务规则 派生列值 触发器很棘手! 什么是数据库触发器数据库触发器是在数据库中发生特定...
  • 数据库触发器.docx

    2020-05-20 16:48:21
    SQL触发器,定义,作用,以及如何使用 主要是为了让小白更加了解sql中触发器的使用,以及触发器的...触发器不同储存过程,是直接作用在数据库中的操作,无关乎程序用户的操作 直接是数据表中触发事件代码的新增修改删除
  • 数据库触发器操作

    2017-05-10 21:26:16
    JY数据库触发器操作USE JY GO1.说明: 作用:实现主键和外键所不能保证的复杂参照完整性和数据一致性 结果: 触发器和引起触发器执行的语句会被当做一次事务处理,如果执行失败, 自动回滚至事务执行前的状态 功能...
  • 数据库 触发器

    2019-04-20 11:14:00
    触发器时为执行业务规则和保持数据完整性而提供的一种机制,它可以在执行插入、更新,删除等操作的前后自动触发。触发器与存储过程类似,但是让不接收输入\输出参数没也不能被显式调用,只能有服务器事件自动触发,...
  • Oracle数据库触发器

    2018-08-21 10:44:04
    数据库触发器是一个与数据库中表相关联的、存储的PL/SQL程序。这意味着触发器是定义在表上面的程序。 2、作用:当每个特定的数据操作语句(插入insert、更新update、删除delet)注意这里没有查询语句,也就是说...
  • Sql Server数据库触发器

    2021-05-20 20:59:35
    Sql Server数据库触发器 触发器的作用? 触发器是一个特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,378
精华内容 35,751
关键字:

删除数据库触发器