精华内容
下载资源
问答
  • mysql create trigger

    千次阅读 2009-12-25 15:59:00
    基本语法: CREATE TRIGGER { BEFORE | AFTER } { INSERT | UPDATE | DELETE } ON FOR EACH ROW 触发器必须有名字,最多64个字符 但是mysql不支持一张表多触发器 解决方案: 由于mysql默认的结束符(定界符)是分号;...
    基本语法:
    CREATE TRIGGER <触发器名称>
    { BEFORE | AFTER } <--
    { INSERT | UPDATE | DELETE }
    ON <表名称>
    FOR EACH ROW
    <触发的SQL语句>
    触发器必须有名字,最多64个字符
    但是mysql不支持一张表多触发器
    解决方案:
    由于mysql默认的结束符(定界符)是分号;
    所以我们要可以先修改定界符
    语法:
    delimiter  自定义的定界符

    然后创建触发器
    如:
      delimiter ?
    CREATE TRIGGER <触发器名称>
    { BEFORE | AFTER } <--
    { INSERT | UPDATE | DELETE }
    ON <表名称>
    FOR EACH ROW
      begin
         insert into ......values(......);
        update ...set ......;
    end
    自定义的定界符

    现在就ok了,可以执行多条sql语句了,还可以与多张表关联了,赫赫...
    展开全文
  • MySQL TRIGGER

    千次阅读 2017-11-27 18:43:00
    触发器(TRIGGER)是MySQL的数据库对象之一,从5.0.2版本开始支持。该对象与编程语言中的函数非常类似,都需要声明、执行等。但是触发器的执行不是由程序调用,也不是由手工启动,而是由事件来触发、激活从而实现...

    以下内容来源于 MySQL 触发器简单实例文章。

    触发器(TRIGGER)是MySQL的数据库对象之一,从5.0.2版本开始支持。该对象与编程语言中的函数非常类似,都需要声明、执行等。但是触发器的执行不是由程序调用,也不是由手工启动,而是由事件来触发、激活从而实现执行。有点类似DOM中的事件。

    语法

    CREATE TRIGGER <触发器名称>  --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.
    { BEFORE | AFTER }  --触发器有执行的时间设置:可以设置为事件发生前或后。
    { INSERT | UPDATE | DELETE }  --同样也能设定触发的事件:它们可以在执行insertupdatedelete的过程中触发。
    ON <表名称>  --触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器。
    FOR EACH ROW  --触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。
    <触发器SQL语句>  --触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句, 包括复合语句,但是这里的语句受的限制和函数的一样。
    
    --你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同。
    
    

    例子
    - 创建两个表

    DROP TABLE IF EXISTS tab1;
    
    CREATE TABLE tab1(
        tab1_id varchar(11)
    );
    
    DROP TABLE IF EXISTS tab2;
    CREATE TABLE tab2(
        tab2_id varchar(11)
    );
    
    • 创建 插入触发器:
    DROP trigger if exists t_insert;
    delimiter $
    create TRIGGER t_insert
    AFTER INSERT on tab1
    for EACH ROW
    BEGIN
        insert into tab2(id) values(new.id);
    END;
    
    delimiter ;
    
    insert into tab1(id) VALUES('1');
    • 创建删除触发器:
    DROP trigger if exists t_insert;
    delimiter $
    create TRIGGER t_insert
    AFTER DELETE on tab1
    for EACH ROW
    BEGIN
        DELETE from tab2 WHERE id=old.id;
    END;
    
    delimiter ;
    
    DELETE from tab1 WHERE id=1;

    触发器里面可以有多个执行语句

    【参考】

    mysql之触发器trigger

    MySQL 触发器简单实例

    如果不清楚 delimiter是怎么用的,欢迎查看MySQL DELIMITER

    展开全文
  • MariaDB TRIGGER

    2016-03-21 20:27:00
    MariaDB TRIGGER 在MariaDB中只有DELETE,INSERT,UPDATE支持trigger,并且只...不支持View 创建trigger (jlive)[crashcourse]>CREATE TRIGGER newproduct AFTER INSERT ON products FOR EACH ROW BEGIN END;...
    MariaDB TRIGGER

    在MariaDB中只有DELETE,INSERT,UPDATE支持trigger,并且只支持Table,  不支持View


    创建trigger

    (jlive)[crashcourse]>CREATE TRIGGER newproduct AFTER INSERT ON products FOR EACH ROW BEGIN END;

    Query OK, 0 rows affected (0.00 sec)


    删除trigger

    (jlive)[crashcourse]>DROP TRIGGER newproduct;

    Query OK, 0 rows affected (0.00 sec)


    trigger只能删除后重建,不能直接修改



    INSERT Trigger

    CREATE TABLE orders_log

    (

    change_id int NOT NULL AUTO_INCREMENT,

    changed_on datetime NOT NULL,

    change_type char(1) NOT NULL,

    order_num int NOT NULL,

    PRIMARY KEY (change_id)

    )ENGINE=Aria;

     



    DELIMITER //

    CREATE TRIGGER neworder AFTER INSERT ON orders 

    FOR EACH ROW

    BEGIN

    INSERT INTO orders_log(changed_on, change_type, order_num)

    VALUES(Now(),'A', NEW.order_num); 

    END;//

    DELIMITER ;

    在AFTER INSERT中有一个特殊的表变更NEW,只要有新记录插入orders表,则在记录插入之后将对就的字段写入到表orders_log中


    (jlive)[crashcourse]>INSERT INTO orders(order_date, cust_id) VALUES(Now(), 10001);

    Query OK, 1 row affected, 1 warning (0.00 sec)


    (jlive)[crashcourse]>SELECT * FROM orders_log;

    +-----------+---------------------+-------------+-----------+

    | change_id | changed_on          | change_type | order_num |

    +-----------+---------------------+-------------+-----------+

    |         1 | 2016-03-21 20:37:38 | A           |     20010 |

    +-----------+---------------------+-------------+-----------+

     

    1 row in set (0.00 sec)



    DELETE Trigger

    DELIMITER //

    CREATE TRIGGER deleteorder BEFORE DELETE ON orders 

    FOR EACH ROW

    BEGIN

    INSERT INTO orders_log(changed_on, change_type, order_num)

    VALUES(Now(),'D', OLD.order_num); 

    END;//

    DELIMITER ;

    (jlive)[crashcourse]>DELETE FROM orders WHERE order_num = 20010;

    Query OK, 1 row affected, 1 warning (0.00 sec)


    (jlive)[crashcourse]>SELECT * FROM orders_log;

    +-----------+---------------------+-------------+-----------+

    | change_id | changed_on          | change_type | order_num |

    +-----------+---------------------+-------------+-----------+

    |         1 | 2016-03-21 20:37:38 | A           |     20010 |

    |         2 | 2016-03-21 20:41:25 | D           |     20010 |

    +-----------+---------------------+-------------+-----------+

     

    2 rows in set (0.00 sec)

    删除前将OLD表中的对应记录写入到日志表


    DELETE前先备份记录

    CREATE TABLE orders_archive

    (

     order_num int NOT NULL PRIMARY KEY AUTO_INCREMENT,

    order_date datetime NOT NULL,

    cust_id int NOT NULL

    ) ENGINE=Aria;


    DELIMITER //

    CREATE OR REPLACE TRIGGER deleteorder BEFORE DELETE ON orders 

    FOR EACH ROW

    BEGIN

    INSERT INTO orders_log(changed_on, change_type, order_num) VALUES(Now(),'D', OLD.order_num); -- log

    INSERT INTO orders_archive(order_num, order_date, cust_id) VALUES(OLD.order_num, OLD.order_date, OLD.cust_id); -- backup

    END;//

    DELIMITER ;




    UPDATE Trigger

    (jlive)[crashcourse]>CREATE TRIGGER updatevendor BEFORE UPDATE ON vendors FOR EACH ROW SET NEW.vend_state = Upper(NEW.vend_state);

    Query OK, 0 rows affected (0.16 sec)


    (jlive)[crashcourse]>UPDATE vendors SET vend_state = 'new york' WHERE vend_id = 1006;               Query OK, 1 row affected (0.01 sec)

     

    Rows matched: 1  Changed: 1  Warnings: 0

    (jlive)[crashcourse]>SELECT vend_state FROM vendors WHERE vend_id = 1006;

    +------------+

    | vend_state |

    +------------+

    | NEW YORK   |

    +------------+

     

    1 row in set (0.15 sec)


    转载于:https://www.cnblogs.com/lixuebin/p/10814168.html

    展开全文
  • 有一个表 create table table1( tb_id int unsigned not null auto_increment primary key, name varchar(20), ...查了下, 是因为mysql的trigger不支持对本表的操作。看来只能另想办法了。 谢谢。
  • for each row 每行受影响,触发器都运行。叫行级触发器。...mysql不支持语句触发器,所以必须写for each row。 实际操作验证: #触发器test5: DELIMITER $$ CREATE TRIGGER test5 AFTER UPDATE ...
    for each row 每行受影响,触发器都运行。叫行级触发器。
    oracle 触发器中分行级触发器和语句级触发器,可不写for each row,不管影响多少行都仅仅运行一次。

    mysql不支持语句触发器,所以必须写for each row。

    实际操作验证:

    #触发器test5:
    DELIMITER $$
    CREATE TRIGGER test5
    AFTER
    UPDATE
    ON goods
    FOR EACH ROW
    BEGIN
      INSERT INTO `ord` VALUES (1, 2, 2);
    END$$

    mysql仅仅支持行级触发器,影响多少行就会运行多少次。


    转载于:https://www.cnblogs.com/mengfanrong/p/5176070.html

    展开全文
  • 创建触发器语句如下: CREATE TRIGGER newproduct AFTER INSERT ON products FOR EACH ROW SELECT 'Product added' ; ...解决方法:加上 into @ee,因为从MySQL5以后不支持触发器返回结果集 ...
  • 原始sql: create trigger testEmpno after insert on emp for each row select NEW.empno; 错误:[Err] 1415 - Not allowed to return a ...原因:从MySQL5以后不支持触发器返回结果集 解决方法: sql语句:c...
  • CREATE TRIGGER contract_info_update BEFORE INSERT ON xd_custfamilys FOR EACH ROW BEGIN DECLARE uuid VARCHAR(32) character set utf8; DECLARE tel VARCHAR(500) character set utf8; DECLARE nam VAR
  • mysql触发器不支持动态sql

    千次阅读 2016-04-20 09:14:38
    drop trigger if exists tri_* DELIMITER // create trigger tri_* before update on pointtable for each row begin if exists (select pointname from pointtable where pointname=new.pointname) then
  • <p>Any advice if it is possible to create/drop trigger from CodeIgniter such as Class DBForge? I can only see Create/Drop for Database and Table. <p>My scenario would be: When a user register, I need...
  • ...I'm trying to create a trigger, but that seems not easy.... I tried <code>res, err := db.DBcon.Exec("DELIMITER $$")</code> but that fails <p>What is the way to do this? </div>
  • 在MySQL5.6版本里,不支持一个表有多个INSERT/DELETE/UPDATE触发器。例如创建t1表两个INSERT的触发器:DELIMITER$$USE`test`$$DROPTRIGGER/*!50032IFEXISTS*/`t1_1`$$CREATE/*!50017DEFINER='admin'@'%'*/TRIGGER`t1...
  • 在MySQL5.6版本里,不支持一个表有多个INSERT/DELETE/UPDATE触发器。例如创建t1表两个INSERT的触发器:DELIMITER$$USE`test`$$DROPTRIGGER/*!50032IFEXISTS*/`t1_1`$$CREATE/*!50017DEFINER=‘admin‘@‘%‘*/...
  • 在MySQL5.6版本里,不支持一个表有多个INSERT/DELETE/UPDATE触发器。例如创建t1表两个INSERT的触发器:DELIMITER$$USE`test`$$DROPTRIGGER/*!50032IFEXISTS*/`t1_1`$$CREATE/*!50017DEFINER='admin'@'%'*/TRIGGER`t1...
  • 在MySQL5.6版本里,不支持一个表有多个INSERT/DELETE/UPDATE触发器。例如创建t1表两个INSERT的触发器:DELIMITER$$USE`test`$$DROPTRIGGER/*!50032IFEXISTS*/`t1_1`$$CREATE/*!50017DEFINER='admin'@'%'*/TRIGGER`t1...
  • 一.触发器1.普义在用来某些操作(增...定义create trigger 触发器名 before|after 事件 on 表名 for each row 触发器语句;触发器名建议为trigger_xxx,这样便于区分,触发器名能重复。3.解释before|after 代表触...
  • 在MySQL5.6版本里,不支持一个表有多个INSERT/DELETE/UPDATE触发器。 例如创建t1表两个INSERT的触发器: 1 2 3 4 5 6 7 8 9 10 11 DELIMITER$$ USE`test`$$ DROPTRIGGER/*!50032IFEXISTS*/`t1_1`$$ CREATE...
  • 慕慕森不幸的是,MySQL不支持SQL检查约束。您可以出于兼容性原因在DDL查询中定义它们,但它们只是被忽略。有一个简单的选择您可以创建BEFORE INSERT和BEFORE UPDATE触发导致错误的触发器,或者在不满足数据要求时将...

空空如也

空空如也

1 2 3 4 5 6
收藏数 103
精华内容 41
关键字:

trigger不支持create