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

推薦する

CSS変数を使用してダークモードを実装するためのサンプルコード

最近、WeChatはAppleによってダークモードの開発を強制されました。ますます多くのウェブサイト...

JavaScript 高度なカスタム例外

目次1. コンセプト1.1 エラーと例外とは何ですか? 1.2 異常の分類2. 例外処理2.1try...

MySQL の最初のインストールが成功した後にパスワードを初期化する手順

ファイルをディレクトリに解凍しますこれは解凍後のディレクトリですmy.iniファイルを入力しますダブ...

操作タイムアウトがないときにMySQLサーバーがアクティブに切断される問題を解決します

MySQL サービスを使用する場合、通常の状況では、MySQL のタイムアウト設定は 8 時間 (2...

MySQL ジョイントテーブルクエリの簡単な例

MySql は結合テーブルクエリを使用しますが、初心者には理解しにくい場合があります。以下の記事では...

MYSQLデータベースの最適化段階を簡単に理解する

導入面接官がこんな質問をしたことはありませんか?データベースをどのように最適化しますか?では、この質...

Linux での Nginx アンチホットリンクと最適化の実装コード

バージョン番号を非表示バージョン番号は非表示になっていません。セキュリティを強化するために、バージョ...

Mysql は、デッドロック問題を解決するために kill コマンドを使用します (実行中の特定の SQL ステートメントを強制終了します)。

MySQL を使用して特定のステートメントを実行すると、データ量が多いためにデッドロックが発生し、...

Mysql GTID Mha 設定方法

Gtid + Mha + Binlog サーバー構成: 1: テスト環境OS: CentOS 6.5...

uniappを使用してWeChatミニプログラムでEChartsを使用する方法

今日は、uniapp を使用して Echarts を統合し、マップ チャートを表示します。 mpvu...

JavaScript でよく使われる 3 つの Web エフェクトの詳細な説明

目次1要素オフセットシリーズ1.1 オフセットの概要1.2 オフセットとスタイルの違い視覚領域クライ...

MySQLデータベースは何をするのか

MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース...

CSSを使用してファイルアップロードパターンを描画する

以下に示すように、あなたならどのようにそれを達成しますか: 通常、フォントアイコンを使用して中央にプ...

Vue シングルファイルコンポーネントの実装

最近、vue について読みました。これまで基本的に見落としていた単一ファイル コンポーネントを見つけ...

Vue Notepadの例の詳細な説明

この記事の例では、メモ帳機能を実装するためのVueの具体的なコードを参考までに共有しています。具体的...