MySQL トリガーの原理と使用例の分析

MySQL トリガーの原理と使用例の分析

この記事では、例を使用して、MySQL トリガーの原理と使用方法を説明します。ご参考までに、詳細は以下の通りです。

この記事の内容:

  • トリガーとは何か
  • トリガーを作成する
    • 単一のトリガーステートメント
    • 複数のトリガーステートメント
  • トリガーを表示
  • トリガーの削除
  • トリガー内の新しいレコードと古いレコードの参照

リリース日: 2018-04-14


トリガーとは何か:

  • トリガーは、特定のアクションの後にいくつかのアクションを「自動的に」実行するために使用されます。 (たとえば、新しい生徒情報が挿入された場合は、クラス テーブルで生徒数を変更する必要があります)。
  • 挿入、削除、更新トリガーを設定すると、挿入、削除、更新操作を実行すると、設定されたコンテンツが自動的にトリガーされます。
  • テーブルには最大 6 つのトリガー (3*2、3 つの操作*2 回 (前|後)) を設定できます。


トリガーを作成します。

  • 構文: テーブル名の各行のトリガー ステートメントに対して、トリガー名の前|後のイベントを作成します。
    • 推奨されるトリガー名は、区別しやすい trigger_xxx です。トリガー名は繰り返すことはできません。
    • before|after は、トリガー ステートメントの実行時間を表します。before の場合、トリガー ステートメントは挿入、削除、または更新操作の前に実行されます。after は後を意味します。
    • イベントは、挿入、削除、更新操作の 1 つです。
    • 各行は、任意のレコードに対して対応する操作を実行するトリガーです。
    • トリガー ステートメントは、トリガーが起動されたときに実行されるステートメントです。
    • たとえば、次のデータは、新しいユーザーが挿入されたときにユーザー作成タイムテーブルに挿入される新しいデータであり、現在の時刻です。
      トリガーtrigger_addUserTimeを作成する 
      前に
       入れる 
      ユーザー情報 
      各行ごとに 
      usercreatetime(create_time) に値(now()) を挿入します。
テーブルuser_infoを作成します(
id int 主キー auto_increment,
ユーザー名varchar(20)がnullではありません。
パスワードvarchar(20)がnullではありません
)

テーブルを作成 usercreatetime(
id int 主キー auto_increment,
create_time 日時
);

user_info に各行を挿入する前に、トリガー trigger_addUserTime を作成します insert into usercreatetime(create_time) values(now());

user_info(ユーザー名、パスワード) に値 ("admin","admin888") を挿入します。

usercreatetime から * を選択します。

複数のトリガー ステートメント:

  • 複数の文をbegin endで囲む必要があります
    • 例えば: image
  • ただし、上記の状況は非コマンドラインモードに適用されることに注意してください(上記はnavicatで実行されます)。コマンドラインで実行する場合は、コマンドターミネータを変更する必要があります(MySQLコマンドは、デフォルトでステートメントターミネータとして「;」を使用します。これを変更しないと、トリガーステートメントを入力して;で終了すると、ステートメントが終了したとみなされ、ステートメントが不完全であるためエラーが報告されます)[区切り文字カスタムシンボル--ステートメントターミネータを指定されたシンボルに一時的に変更します]。
    • [終了文字を $$ として定義し、トリガー ステートメントで使用します。end]
        区切り文字 $$ -- 通常は $$ と定義されます
        各行のテーブル名にイベントの前後にトリガー トリガー名を作成します 
        始める 
          声明; 声明;
        終わり 
        $$
        
        区切り文字 ;
        -- 区切り文字の例 $$ -- 一般的には $$ と定義されます
        各行のuser_infoに挿入する前にトリガーtrigger_addUserTime23を作成します。 
        始める 
        usercreatetime(create_time) に値(now()) を挿入します。
        usercreatetime(create_time) に値(now()) を挿入します。
        終わり 
        $$
        区切り文字 ; 
    • imageimage


トリガーを表示:

  • すべてのトリガーを表示するには、show triggers\G を使用します。 image
  • データベース information_schema で、トリガー テーブルを表示してトリガーを表示します。use select * from triggers\G; [もちろん、トリガー名を where 条件として使用してデータを検索することもできます] image
  • トリガー作成ステートメントを表示します: show create trigger trigger name\G;


トリガーを削除するには:

  • トリガーを削除するには、drop trigger trigger name; を使用します。


トリガーによって参照される古いレコードと新しいレコード:

  • 場合によっては、生徒数を増やしたり、以前の生徒数を知る必要があるなど、以前のデータを参照する必要があるかもしれません。
  • 新しいデータは新しく挿入されたデータ、古いデータは元のデータです(挿入時には古いデータは存在せず、削除時には新しいデータは存在せず、更新時には古いデータと新しいデータの両方が存在します)。 (イベントの種類を指します)
  • データを参照するには、odl\new.fieldname を使用します。 (参照されるデータはトリガー(イベント)をトリガーしたステートメントであることに注意してください)
  • 次に例を示します: (学生レコードを挿入する場合、new.name を通じて新しく挿入された学生の名前を取得し、new.name を別のテーブルに挿入します)
      テーブル学生を作成(
      id int 主キー auto_increment,
      名前varchar(15)がnullでない、
      性別 varchar(15) nullでない
      );
      
      テーブルstu_infoを作成します(
      名前varchar(15) nullではない
      );
      
      学生に挿入する前にトリガー addCount を作成する 
      各行ごとに 
      stu_info に値(new.name)を挿入します。
      
      学生名、性別に値("lilei","男性")を挿入します。
      stu_info から * を選択します。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL トランザクション操作スキル」、「MySQL ストアド プロシージャ スキル」、「MySQL データベース ロック関連スキルの概要」、および「MySQL 共通関数の概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQLトリガーの使用と理解
  • MySQLデータベーストリガーの詳細な説明
  • MySQL トリガー構文とアプリケーション例
  • MySQL トリガーの使用方法と利点と欠点の紹介

<<:  JavaScript キャンバスで 9 マスのグリッドカットの効果を実現

>>:  nginxカスタム変数と組み込み定義済み変数の使用

推薦する

Ace をベースにした Markdown エディターを共有する

エディターは 2 つのカテゴリに分かれていると思います。1 つは、即時レンダリングを実現するために左...

プレーンな JS オブジェクトの代わりに Map を使用する場合

目次1. マップは任意のタイプのキーを受け入れます2. マップにはキー名に関する制限はありません3....

Docker Compose を使用して ELK を迅速にデプロイする (テスト済みで効果的)

目次1. 概要1.1 定義1.2 機能説明2. ELKを展開する2.1 ディレクトリとファイルを作成...

HTML マークアップ言語 - リファレンス

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

Vue3はCSSの無限シームレススクロール効果を実装します

この記事では、CSS無限シームレススクロール効果を実現するためのvue3の具体的なコードを参考までに...

nginx ロケーション優先度の詳細な説明

場所表現タイプ~ は大文字と小文字を区別して通常の一致を実行することを示します~*は大文字と小文字を...

js クロージャとガベージ コレクション メカニズムの例の詳細な説明

目次序文文章1. 終了1.1 クロージャとは何ですか? 1.2 クロージャの特性1.3 クロージャを...

パフォーマンス負荷診断にMySQLシステムデータベースを使用する方法

ある達人がかつて、自分の妻のことを知るのと同じくらい、自分が管理するデータベースのことを知るべきだと...

Vscode が Ubuntu にリモート接続する際のエラー問題の解決方法

1. 事件の背景:仕事上、Ubuntu への vscode リモート接続を使用する必要があります。 ...

MySQL レプリケーションの詳細な説明と簡単な例

MySQL レプリケーションの詳細な説明と簡単な例マスタースレーブレプリケーション技術は、MySQL...

MySQL データベースの最適化: インデックスの実装原則と使用状況の分析

この記事では、例を使用して、MySQL データベースの最適化のためのインデックス実装の原則と使用方法...

Linux にソフトウェアをインストールするときにソフトウェア パッケージが存在しない問題を解決する方法

ソフトウェア パッケージが存在しない場合は、インストールされているソフトウェアのソフトウェア ソース...

イベントバブリング、イベントキャプチャ、イベント委任に基づく詳細な説明

イベントバブリング、イベントキャプチャ、イベント委任JavaScript では、イベント委譲は非常に...

HTMLのマーキータグは、シームレスなスクロールマーキー効果を実現します。

<marquee> タグはペアで表示されるタグです。最初のタグ <marquee...

JSONP クロスドメインシミュレーション Baidu 検索

目次1. JSONPとは何か2. JSONPクロスドメインリクエスト3. Baidu検索をシミュレー...