mysql的trigger是仅仅statement激活,不能对同一table的同一个event写两个trigger, 同一个event是指create trigger 中的trigger_
mysql的trigger是仅仅statement激活,,不能对同一table的同一个event写两个trigger, 同一个event是指create trigger 中的trigger_time+trigger_event. trigger不会因为某些表的改变而被激活,这些表的改变是通过api修改的,这些api不发送语句给mysql server.
1. mysql只能对每一行触发一次,而oracle可以对每一行整个表触发一次。
2. mysql只能是表的行激活触发器,但oracle可以做到对列触发。
oracle里面触发器的定义语句:
create
[or replace] trigger_name trigger_time trigger_event of column
on tbl_name referencing old as old_value
new as new_value
for each row trigger_stmt
mysql中触发器的定义语句:
create
[definer = { user | current_user }]
trigger trigger_name trigger_time trigger_event
on tbl_name for each row trigger_stmt
简单测试如下:
mysql> delimiter |
mysql> create trigger test_a before insert on a
-> for each row begin
-> insert into abc set id = new.id;
->
-> end;
-> |
query ok, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql>
mysql>
mysql> delimiter |
mysql> create trigger test_b before insert on a
-> for each row begin
-> insert into abc set name = new.name;
->
-> end;
-> |
error 1235 (42000): this version of mysql doesn't yet support 'multiple triggers with the same action time and event for one table'
mysql> delimiter ;
mysql>
mysql>
mysql> delimiter |
mysql> create trigger test_b after insert on a
-> for each row begin
-> insert into abc set name = new.name;
->
-> end;
-> |
query ok, 0 rows affected (0.00 sec)