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

推薦する

MySQLのconcat関連関数の詳細な説明

1. concat() 関数機能: 複数の文字列を 1 つの文字列に連結する構文: concat(s...

MySQL explain クエリ命令情報の取得原理と例

explain はクエリ実行プラン情報を取得するために使用されます。 1. 文法次のように、sele...

Ubuntuで余分なカーネルを削除する方法

ステップ1: 現在のカーネルを表示する 読み取る $ uname -a Linux rew 4.15...

MySQL のバックアップとリカバリの設計アイデア

背景まず、背景を説明します。ある制約により、当社の現在のバックアップ戦略では、1 日おきにフル バッ...

HTML スライドフローティングボールメニュー効果の実装

CSS スタイル html,本文{ 幅: 100%; 高さ: 100%; マージン: 0;パディング...

HTML から PDF への変換事例の概要 (複数の画像を推奨)

仕事の都合上、最近 HTML を PDF に変換する機能について調べることに時間を費やしました。 H...

UDP シンプル サーバー クライアント コード例

UDP の理論については詳しく説明しません。UDP に関する HelloWorld プログラムを紹介...

MySQL 8.0.11 Mac 用インストール ガイド

MACはmysql8.0をインストールします。具体的な内容は次のとおりです。 1. ダウンロードアド...

ノードにおけるhttpモジュールの使用と実行プロセス

ノードにおけるhttpの役割は何ですか? httpモジュールの役割は、サーバーの作成と記述を支援する...

Linux zabbix エージェントの展開と設定方法の詳細な説明

1. web01にzabbix-agentをインストールするZabbix ウェアハウスをデプロイする...

Vue ミックスインの使用方法とオプションのマージの詳細な説明

目次1. コンポーネントでの使用2. オプションのマージ要約する1. コンポーネントでの使用Mixi...

CentOS7 デプロイメント Flask (Apache、mod_wsgi、Python36、venv)

1. Apacheをインストールする # yum インストール -y httpd httpd-de...

Vue.js と MJML でレスポンシブなメールを作成する

MJML は、開発者が美しく、応答性に優れ、あらゆるデバイスやメール クライアントで動作する魅力的な...

Vue+Openlayerはグラフィックスのドラッグと回転変形効果を実現します

目次序文関連資料成果を達成する実装手順序文Openlayer には独自の拡張プラグイン ol-ext...