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カスタム変数と組み込み定義済み変数の使用

推薦する

nofollowタグの使用と分析に関する簡単な説明

nofollowをめぐる論争Zac と Guoping の間では、nofollow が PR を無駄...

知らないかもしれないmysqldumpパラメータ

前回の記事で、mysqldump バックアップ ファイルに記録されるタイムスタンプ データは UTC...

Reactで例外を適切にキャプチャする方法

目次序文エラー境界エラー境界を超えてトライ/キャッチwindow.onerror、エラーイベント未処...

IE6 で幅と高さがおかしいバグ

図に示すように: しかし、IE6で表示すると、right:1px:になります。 IE6 には、幅と高...

HTMLエンコードによる文字化け問題について

今日、3年生から質問がありました。彼が書いた HTML コードを開くと、文字化けした文字が表示されま...

一般的な MySQL 関数の例の概要 [集計関数、文字列、数値、時刻と日付の処理など]

この記事では、よく使用される MySQL 関数について説明します。ご参考までに、詳細は以下の通りです...

cmd と python での MySQL の一般的な操作についての簡単な説明

環境設定1: MySQLをインストールし、MySQLのbinディレクトリを環境変数に追加する環境設定...

Mysqlは実行中のトランザクションを照会し、ロックを待機する方法

navicatを使用してテストと学習を行います。まず、 set autocommit = 0;を使用...

mysql データ型変換の実装

1. 問題下図のような表があり、結果値がreference_high値より大きいデータを見つける必要...

C++ を使用して MySQL に接続する方法

C++でMySQLに接続する際の参考情報です。具体的な内容は以下のとおりです。 MySQLCon ク...

Linux の crw、brw、lrw などのファイル属性は何ですか?

ファイルとは何ですか?すべてのファイルは実際には文字列のストリームですが、適切な解析方法を使用すると...

HTML のスクロールバーについて/スクロールバーの削除

1. xhtmlの下のスクロールバーの色元の HTML では、ページ全体のスクロール バーを次のよう...

MySQL 4G メモリ サーバー構成の最適化

会社のウェブサイトのアクセス数が増えてくると(1日10万PV以上)、当然MySQLがボトルネックにな...

複数の X 軸を使用して 7 日間の天気予報を実現するための Echarts サンプル コード

目次UIデザインEcharts の例の効果序文サンプルコード最終結果UIデザイン Echarts の...

JavaScript を使用して二分探索木を実装する方法

コンピュータ サイエンスで最も一般的に使用され、議論されているデータ構造の 1 つは、二分探索木です...