MySQLアドバンスド-トリガ


1紹介
トリガは、テーブルに関連するデータベース・オブジェクトです.insert/update/deleteの前または後に、トリガで定義されたSQL文のセットがトリガされ、実行されます.(JSのようなイベント)フリップフロップのこのような特性は、データベース側でデータの整合性、ログ記録、データ検証などの操作を確保するのに役立ちます.別名OLDとNEWを使用して、トリガで変化したレコード内容を参照します.これは他のデータベースと似ています.トリガはロー・レベルのトリガのみをサポートし、文レベルのトリガはサポートされません.
トリガのタイプ
NEWとOLDの使用
INSERT型トリガ
NEWは、データが追加または追加されることを示す
UPDATE型トリガ
OLDは修正前のデータ、NEWは修正後のデータ
DELETE型トリガ
OLDは、削除するデータまたはデータを表す
2トリガの作成
構文:
create trigger trigger_name 

before/after insert/update/delete

on tbl_name 

[ for each row ]  --      

begin

	trigger_stmt ;

end;


需要
        emp          ,     ,    ,    ;

まず、ログ・テーブルを作成します.
create table emp_logs(
  id int(11) not null auto_increment,
  operation varchar(20) not null comment '    , insert/update/delete',
  operate_time datetime not null comment '    ',
  operate_id int(11) not null comment '    ID',
  operate_params varchar(500) comment '    ',
  primary key(`id`)
)engine=innodb default charset=utf8;

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 ;

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 ;

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 ;

テスト:
insert into emp(id,name,age,salary) values(null, '    ',30,3500);
insert into emp(id,name,age,salary) values(null, '    ',33,3200);

update emp set age = 39 where id = 3;

delete from emp where id = 5;

3トリガの削除
構文:
drop trigger [schema_name.]trigger_name

schema_が指定されていない場合name、デフォルトは現在のデータベースです.
4トリガーの表示
SHOW TRIGGERSコマンドを実行することで、トリガの状態や構文などの情報を表示できます.構文:
show triggers ;