この記事では、例を使用して MySQL トリガーの作成と使用について説明します。ご参考までに、詳細は以下の通りです。 CREATE TRIGGER ステートメントを使用して新しいトリガーを作成できます。具体的な構文を見てみましょう。 トリガーの作成 トリガー名 トリガー時間 トリガーイベント ON テーブル名 各行ごとに 始める ... 終わり; それでは、上記の SQL の具体的な意味を詳しく見てみましょう。
大まかな理解ができたので、従業員テーブルの行データの変更を記録するトリガーを作成してみましょう。まず、このテーブルの構造を見てみましょう。 mysql> DESC 従業員; +----------------+--------------+------+-----+---------+-------+ | フィールド | タイプ | Null | キー | デフォルト | 追加 | +----------------+--------------+------+-----+---------+-------+ | 従業員番号 | int(11) | NO | PRI | NULL | | | lastName | varchar(50) | NO | | NULL | | | firstName | varchar(50) | NO | | NULL | | | 拡張子 | varchar(10) | NO | | NULL | | | 電子メール | varchar(100) | NO | | NULL | | | オフィスコード | varchar(10) | NO | MUL | NULL | | | reportsTo | int(11) | YES | MUL | NULL | | | 職名 | varchar(50) | NO | | NULL | | +----------------+--------------+------+-----+---------+-------+ 8行セット 従業員テーブル内のデータの変更を保存するために、従業員監査という新しいテーブルを作成しましょう。 従業員監査テーブルを作成します( id INT AUTO_INCREMENT 主キー、 従業員番号 INT NOT NULL、 姓 VARCHAR(50) NOT NULL, 変更日時 DATETIME DEFAULT NULL、 アクション VARCHAR(50) デフォルト NULL ); 次に、employees テーブルの行が更新される前に呼び出される BEFORE UPDATE トリガーを作成します。 区切り文字 $$ トリガー before_employee_update を作成する 従業員に関するアップデート前 各行ごとに 始める employees_auditに挿入 SETアクション = '更新'、 従業員番号 = OLD.従業員番号、 姓 = OLD.姓、 変更日時 = NOW(); 終わり$$ 区切り文字 ; 上記のトリガーの本体では、トリガーの影響を受ける行の employeeNumber 列と lastname 列にアクセスするために OLD キーワードを使用しています。挿入用に定義されたトリガーでは、NEW キーワードのみが使用できることに注意してください。 OLDキーワードは使用できません。ただし、DELETE 用に定義されたトリガーには新しい行がないため、OLD キーワードのみを使用できます。更新トリガーでは、OLD は更新前の行を参照し、NEW は更新後の行を参照します。 次に、SHOW TRIGGERS ステートメントを使用して、データベース内のトリガーを表示します。 mysql> トリガーを表示; +------------------------+--------+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------+-----------------------+------------------------------------------------------------------------------------+---------------------+ | トリガー | イベント | テーブル | ステートメント | タイミング | 作成 | sql_mode | Definer | character_set_client | collation_connection | データベース照合 | +------------------------+--------+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------+-----------------------+------------------------------------------------------------------------------------+---------------------+ | before_employee_update | 更新 | 従業員 | 開始 employees_auditに挿入 SETアクション = '更新'、 従業員番号 = OLD.従業員番号、 姓 = OLD.姓、 変更日時 = NOW(); 終了 | 前 | 2017-08-02 22:06:36.40 | ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION | root@localhost | utf8 | utf8_general_ci | utf8_general_ci | +------------------------+--------+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------+-----------------------+------------------------------------------------------------------------------------+---------------------+ セット内の1行 完了したら、従業員テーブルを更新して、トリガーが呼び出されたかどうかを確認できます。 従業員の更新 セット lastName = 'Maxsu' どこ 従業員番号 = 1056; 次のクエリを使用して employees_audit テーブルを照会し、トリガーが UPDATE ステートメントによって呼び出されるかどうかを確認できます。 mysql> employees_audit から * を選択します。 +----+----------------+----------+----------------------+--------+ | id | 従業員番号 | 姓 | 変更日時 | アクション | +----+----------------+----------+----------------------+--------+ | 1 | 1056 | ヒル | 2017-08-02 22:15:51 | 更新 | +----+----------------+----------+----------------------+--------+ セット内の1行 上記の出力に示されているように、トリガーは実際に呼び出され、employees_audit テーブルに新しい行が挿入されます。 さて、この記録についてはこれですべてです。 MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL トランザクション操作スキル」、「MySQL ストアド プロシージャ スキル」、「MySQL データベース ロック関連スキルの概要」、および「MySQL 共通関数の概要」 この記事が皆様のMySQLデータベース設計に役立つことを願っています。 以下もご興味があるかもしれません:
|
<<: JavaScript キャンバスで動的な点と線の効果を実現
>>: Windows SSHサーバーを簡単に構築するためのいくつかの手順
ミラーを探すDocker Hubのウェブサイトからイメージを検索できます。Docker Hubのウェ...
MySQL での置換例の詳細な説明replace into は insert と似ていますが、rep...
かなり前の記事で、 -webkit-box-reflectプロパティについて説明しました。リフレクシ...
目次概要1. バックエンドデータの取得と処理2. インターフェース表示処理概要前回のエッセイ「ステッ...
目次1. プロキシモジュールをインストールする2. プロキシを設定する1. プロキシモジュールをイン...
目次1. 問題の発見2. プロセスの詳細情報を表示する3. 解決策4. 大法を再開する1. 問題の発...
1.ページを XML タイプとして宣言しないでください。ページでは UTF-8 または UTF-16...
目次ナンセンス文章最初ルーター/index.js 2番目1. プラグインをインストールする2.mai...
目次1. 主な機能2. 実装のアイデア3. コードの実装4. エフェクト表示V. 結論1. 主な機能...
目次1. 手ぶれ補正機能2. Vueでdebouceの手ぶれ補正機能を使用する1. 手ぶれ補正機能2...
目次ブートストラップと関連コンテンツの紹介グリッドシステムネストされた列列オフセット列の並べ替えナビ...
1. PRIMARY KEY(主キーインデックス)を追加するmysql>ALTER TABLE...
ブラウザのウェブページを最適化するためのいくつかのルールページの最適化静的リソース圧縮ビルド ツール...
Redux はシンプルな状態マネージャーです。その歴史をたどることはしません。使用法の観点から見ると...
今日は折り紙飛行機(飛べる飛行機)を作ります基本的にすべてCSSで実装されており、JSはごく一部に過...