MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

同じトリガーイベントとアクション時間に対して複数のMySQLトリガーを作成するにはどうすればよいですか?


MySQL 5.7.2+を使用すると、テーブル内の同じイベントとアクション時間に対して複数のトリガーを作成できます。イベントが発生すると、両方のトリガーが順番にアクティブになります。例の助けを借りて理解することができます-

この例では、BEFOREUPDATEなどの同じイベントに対して複数のトリガーを作成しています。トリガーの名前は「Studentdetail_before_update」と「Studentdetail_before_update2」です。イベントが発生すると、順次アクティブになります。次のデータを持つテーブル「Student_detail」にこれらのトリガーを作成しています-

mysql> Select * from Student_detail;
+-----------+-------------+------------+
| Studentid | StudentName | address    |
+-----------+-------------+------------+
| 100       | Gaurav      | Delhi      |
| 101       | Raman       | Shimla     |
| 103       | Rahul       | Jaipur     |
| 104       | Ram         | Chandigarh |
| 105       | Mohan       | Chandigarh |
+-----------+-------------+------------+
5 rows in set (0.06 sec)

mysql> Delimiter //

次のクエリを使用して、最初のトリガーを作成します。これは、前と同じクエリで作成されます。

mysql> Create Trigger studentdetail_before_update
    -> BEFORE UPDATE
    -> ON Student_detail
    -> FOR EACH ROW
    -> BEGIN
    -> DECLARE AUSER Varchar(40);
    -> SELECT USER() into AUSER;
    ->INSERT INTO Student_detail_updated(studentid, Updated_date,Updated_by) values(OLD.studentid,NOW(),AUSER);
    -> END; //
Query OK, 0 rows affected (0.17 sec)

mysql> Update student_detail SET Address = 'Ludhiana' Where studentName = 'Ram';
Query OK, 1 row affected (0.15 sec)
Rows matched: 1 Changed: 1 Warnings: 0

上記で作成したトリガーを呼び出した後、次の結果が得られました-

mysql> Select * from student_detail_updated;
+-----------+---------------------+----------------+
| studentid | Updated_date        | Updated_by     |
+-----------+---------------------+----------------+
| 104       | 2017-11-22 16:17:16 | root@localhost |
+-----------+---------------------+----------------+
1 row in set (0.00 sec)

これで、同じイベントとアクション時間の2番目のトリガーを次のように作成できます-

mysql> Create Trigger studentdetail_before_update2
    -> BEFORE UPDATE
    -> ON Student_detail
    -> FOR EACH ROW FOLLOWS studentdetail_before_update
    -> BEGIN
    -> DECLARE AUSER Varchar(40);
    -> SELECT USER() into AUSER;
    -> INSERT INTO Student_detail_updated(studentid, Updated_date,Updated_by) values(OLD.studentid,NOW(),AUSER);
    -> END; //
Query OK, 0 rows affected (0.15 sec)

上記のトリガーは、キーワード「FOLLOWS」を使用しているため、最初のトリガーの後にアクティブになります。

mysql> Update Student_detail SET Address = 'Patiala' WHERE studentname = 'Mohan';
Query OK, 1 row affected (0.08 sec)
Rows matched: 1 Changed: 1 Warnings: 0

ここで、値を更新すると、次の結果セットには、同じイベントとアクション時間の2つの行が表示されます。 2行目はstudentdetail_before_updateトリガー後の値を表し、3行目はstudentdetail_before_update2トリガー後の値を表します。

mysql> Select * from student_detail_updated;
+-----------+---------------------+----------------+
| studentid | Updated_date        | Updated_by     |
+-----------+---------------------+----------------+
| 104       | 2017-11-22 16:17:16 | root@localhost |
| 105       | 2017-11-22 16:19:28 | root@localhost |
| 105       | 2017-11-22 16:19:28 | root@localhost |
+-----------+---------------------+----------------+
3 rows in set (0.00 sec)

  1. MySQLで同時に複数のデータを入力しますか?

    以下は構文です- insert into yourTableName values(yourValue1,yourValue2,.....N), (yourValue1,yourValue2,.....N), (yourValue1,yourValue2,.....N), (yourValue1,yourValue2,.....N), . . . N テーブルを作成しましょう- mysql> create table demo56 −> ( −> id int, −> first_name varchar(20), −&

  2. Tkinterで同時に複数のキャンバスを表示するにはどうすればよいですか?

    Canvasウィジェットは、Tkinterの用途の広いウィジェットの1つであり、アプリケーションでイラストを作成したり、図形、円弧、画像、その他の複雑なレイアウトを描画したりするために使用されます。 Canvasウィジェットを作成するには、 canvas(root、** options)のコンストラクターを作成する必要があります。 。 ファクトリ関数を使用して、テキスト、画像、円弧を作成したり、キャンバスに他の形状を定義したりできます。場合によっては、同じキャンバスを使用して別のキャンバスを作成し、アプリケーションワークフローの一貫性を維持したい場合は、別のキャンバスを作成するイベントを呼び