mysql--トリガ - 例

データ準備:

作成 、テーブルの従業員(num個のint50 )、
                        D_ID INT50 )、
                        名前のVARCHAR50 )、
                        年齢INT50 )、
                        セックスVARCHAR50 )、
                        homeadd VARCHAR50 
                       ); 
挿入 従業員の11001"zhangsan ' 26は' のNaN 3 ' ' 北京' ); INSERT INTO従業員21001' リシ' 24' NV ' ' 湖南省' ); INSERT INTO従業員31002' wangwu '25' NaN 3を'' 江蘇' ); インサート への従業員の値が41004' ARIC '15' ナン'' yingguo ' )。
選択 * から社員。 作成 、テーブルの部門を(D_ID INT50 )、 d_nameのVARCHAR50 )、 functioneのVARCHAR50 アドレスVARCHAR50 )。
挿入 部門1001' keyanbu '' yanfachanpin '' 3lou5hao ' )。 インサート 部門1002' shengchanbu '' shengchanchanp '' 5louyiceng ' )。 挿入 部門1003' xiaoshoubu '' cehuaxiaoshou '' 1louxiaoshoudating ' )。
選択 * から部門。

従業員から*を選択します。

 

 部門から*を選択します。

 

 

================================================== ========================

作成 トリガーの前にトリガー名を| トリガイベント後
 テーブル名のための各行が

、文を実行

------------------------------- --------------------------------------------- 

DELIMITER && 
作成 トリガートリガーを前の名前です| トリガイベント後
 テーブル名のための各行
   始まる
        文リストの実行
  終了
  && 
、区切り文字を


トリガイベントがINSERT、を含む、トリガ条件での更新削除

テーブル名は、テーブルのトリガ・イベント操作の名前を参照します。

テーブルを作成します。

作成 テーブル trigger_time(EXEC_TIMEのVARCHAR50 
                          )。trigger_timeから*を選択します。







----------選択)(今;

 

 

 

 

 

=================================================

トリガーを作成します。

作成  トリガ前dept_trig1をインサート 上の部門のための各行インサート  trigger_time ()(今)。

 

 

 

===========================================

、デモンストレーション最初のレコードを削除し、それに追加するには:

削除 から部門D_ID = 1003 ; 

 

 

 

 

 

=========================================

単に削除されたレコードを追加します。

insert into department values(1003,'xiaoshoubu','cehuaxiaoshou','1louxiaoshoudating'); 

 

 

 

 

 

===================================================================

在department表insert时,触发器会被触发,我们查看下:

select * from trigger_time;

 

 

===========================================================

==========================================================

 

示例02:

创建第二个演示示例用的时间表:

create table trigger_time1 ( exec_time varchar(50)
                          );


select * from trigger_time1;

 

 

 

 

==================================================================

 

创建第二个触发器:

delimiter &&
create  trigger dept_trig2 after delete on department for each row 
begin
      insert into trigger_time1 values ( now() );
      insert into trigger_time values ( now() );
end 
&&
delimi

 

 

 

 

 

 

 

 

================================================

执行删除语句:

delete from department where d_id = 1003;

 

 

 

 

 

 

==========================================

查看被删除记录的表以及2个时间表:

select * from department;
select * from trigger_time;
select * from trigger_time1;

 

 

 

 

 

 

 

 

 

=================================================================================================

查看触发器

1、查看数据库中所有触发器的信息:

       show triggers;

 

 

 

 

 

========================================================================

 

 

 

2、在triggers表中查看触发器信息

mysql中所有触发器的定义都存在information_schema数据库下的triggers表中,查询triggers表,可以查询数据库中所有触发器的详细信息

select * from information_schema.triggers; /*查询所有*/


select * from information_schema.triggers where trigger_name = 'dept_trig1'; /*单个指定查询*/


注意:在激活触发器时,对触发器中的执行语句存在一些限制。而且触发器有问题,会阻止程序向下执行,而且数据不能回滚。

select * from information_schema.triggers; /*查询所有*/

select * from information_schema.triggers where trigger_name = 'dept_trig1'; 

select * from information_schema.triggers where trigger_name = 'dept_trig2'; 

 

 

 

 

 

 

 

 

==================================================

 

3、删除触发器

     drop trigger 触发器名;

 

select * from information_schema.triggers;


drop trigger dept_trig1;

drop trigger dept_trig2;

おすすめ

転載: www.cnblogs.com/xiaobaibailongma/p/12093517.html