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

推薦する

css3 flexレイアウト justify-content:space-between 最後の行は左揃えになります

justify-content:space-betweenレイアウトを使用する場合、要素の最後の行に...

UbuntuはSSHサービスのリモートログイン操作を開始します

ssh-secure シェルは、安全なリモート ログインを提供します。組み込みシステムを開発し、Li...

Linux での scp および sftp コマンドの詳細な説明

目次序文1. SCPの使用法2. sftpを使用する3. scp と sftp の違いは何ですか?ど...

MySql エラー 1698 (28000) の解決策

1. 問題の説明: MysqlERROR1698 (28000) の解決方法、新しくインストールされ...

クールなバーコードエフェクトの作り方を教えます

声明:この記事では、Web ページ制作技術を使用して問題を包括的に解決するという考え方を反映して、W...

CentOS インストール mysql5.7 詳細チュートリアル

この記事では、参考までに、centOSにmysql5.7をインストールする詳細な手順を紹介します。具...

MySQL 5.6.37 (zip) ダウンロード インストール 構成 グラフィック チュートリアル

この記事では、MySQL 5.6.37のダウンロード、インストール、設定のチュートリアルを参考までに...

Vue3はフロントエンドのログを出力するためにaxiosインターセプターを使用する

目次1. はじめに2. axiosインターセプターを使用してフロントエンドログを出力する1. はじめ...

Linux ipcsコマンドの使用

1. コマンドの紹介ipcs コマンドは、Linux のプロセス間通信機能の状態を報告するために使用...

CSS でよく使用されるフォントサイズ、フォント単位、行の高さの詳細な説明

px(ピクセル)ピクセルという言葉は皆さんもよくご存知だと思います。次に、この単位に関するちょっとし...

React Router で履歴リダイレクトを使用する方法

react-routerでは、コンポーネント内のジャンプは<Link>で使用できます。し...

EXPLAIN コマンドの詳細な説明と MySQL での使用方法

1. シナリオの説明: 同僚から MySQL で explain を使用する方法を教わったので、返さ...

Nginx の負荷分散方法の概要

負荷分散を理解するには、まずフォワード プロキシとリバース プロキシを理解する必要があります。注記:...

JSONオブジェクトのキーを置き換える最良の方法

JSON (JavaScript Object Notation、JS Object Notatio...

HTMLの基本構文は、HTMLを学び始めたばかりの人にとって便利です。

1.1 一般的なマーキング一般的なタグは開始タグと終了タグで構成されます。構文は次のとおりです: ...