有如下表:create table t1(id int, name varchar(20));create table t2(id int, name varchar(20));
我想写一个触发器,就是当t1表的id内容发声改变时,t2表里的内容全部更新为t1表内的。我写了一个这样的:
create trigger tri1 after update on t1
for each row begin
update into t2 values(NEW.id, NEW.name);
end;该怎么改,才能是只当id发声改变时才激活触 发器?

解决方案 »

  1.   

    t2表里的内容全部更新为t1表内的:
    是新的还是旧的记录?是UPDATE还是INSERT?
    新的:
    create trigger tri1 after update on t1 
    for each row begin 
    INSERT into t2 values(NEW.id, NEW.name); 
    end;
      

  2.   

    该怎么改,才能是只当id发声改变时才激活触 发器?
    IF NEW.ID<>OLD.ID THEN
    INSERT into t2 values(NEW.id, NEW.name);
    END IF
      

  3.   

    可以按你的方法如下实现。
    但当INSERT / UPDATE的时候怎么办呢?
    mysql> create table t1(id int, name varchar(20));
    Query OK, 0 rows affected (0.09 sec)mysql> create table t2(id int, name varchar(20));
    Query OK, 0 rows affected (0.05 sec)mysql> delimiter //mysql> create trigger tri1 after update on t1
        -> for each row
        -> begin
        ->  if new.id != old.id then
        ->          update t2 set id=new.id , name=new.name where id=old.id;
        ->  end if;
        -> end//
    Query OK, 0 rows affected (0.13 sec)mysql> delimiter ;
    mysql> insert into t1 values (1,'a1'),(2,'a2'),(3,'a3');
    Query OK, 3 rows affected (0.06 sec)
    Records: 3  Duplicates: 0  Warnings: 0mysql> insert into t2 values (1,'a1'),(2,'a2'),(3,'a3');
    Query OK, 3 rows affected (0.03 sec)
    Records: 3  Duplicates: 0  Warnings: 0mysql> select * from t1;
    +------+------+
    | id   | name |
    +------+------+
    |    1 | a1   |
    |    2 | a2   |
    |    3 | a3   |
    +------+------+
    3 rows in set (0.00 sec)mysql> select * from t2;
    +------+------+
    | id   | name |
    +------+------+
    |    1 | a1   |
    |    2 | a2   |
    |    3 | a3   |
    +------+------+
    3 rows in set (0.00 sec)-- ID 无变化
    mysql> update t1 set name=concat(name,11);
    Query OK, 3 rows affected (0.02 sec)
    Rows matched: 3  Changed: 3  Warnings: 0mysql> select * from t1;
    +------+------+
    | id   | name |
    +------+------+
    |    1 | a111 |
    |    2 | a211 |
    |    3 | a311 |
    +------+------+
    3 rows in set (0.00 sec)mysql> select * from t2;
    +------+------+
    | id   | name |
    +------+------+
    |    1 | a1   |
    |    2 | a2   |
    |    3 | a3   |
    +------+------+
    3 rows in set (0.00 sec)-- ID 有变化
    mysql> update t1 set id=id+10;
    Query OK, 3 rows affected (0.06 sec)
    Rows matched: 3  Changed: 3  Warnings: 0mysql> select * from t1;
    +------+------+
    | id   | name |
    +------+------+
    |   11 | a111 |
    |   12 | a211 |
    |   13 | a311 |
    +------+------+
    3 rows in set (0.00 sec)mysql> select * from t2;
    +------+------+
    | id   | name |
    +------+------+
    |   11 | a111 |
    |   12 | a211 |
    |   13 | a311 |
    +------+------+
    3 rows in set (0.00 sec)mysql>