この記事では、例を使用して、MySQL トリガーの概念、原則、および使用方法を説明します。ご参考までに、詳細は以下の通りです。 1. トリガーの概念
上記は、Baidu が提示したトリガーの概念です。トリガーの概念について私が理解しているのは、SQL ステートメントを実行すると、この SQL ステートメントの実行によって他の SQL ステートメントの実行が自動的にトリガーされるということです。とても簡単です。 非常にシンプルな説明: sql1->trigger->sqlN、1つのsqlが複数のsqlをトリガーします 2. トリガー作成の4つの要素 (1)監視場所(表) 3. トリガーを作成する 需要: 注文を行うと、対応する商品の在庫がそれに応じて削減される必要があります。つまり、購入された商品の数だけ在庫が削減される必要があります。 注文表: ord まず、テーブルを作成し、データを追加します。 テーブル商品を作成する( gid int、 名前varchar(20), 数値小数点 ); テーブル ord を作成する( oid int、 gid int、 非常に小さい ); 商品に値(1,'cat',40)を挿入します。 商品に値(2,'dog',63)を挿入します。 商品に値(3,'pig',87)を挿入します。 次に、トリガー作成の 4 つの要素に従って分析します。
最後にトリガーを作成します。 トリガー t1 を作成する 後 入れる オンオード 各行ごとに 始める gid = 1 の場合、商品セット num=num-2 を更新します。 終了$ 分析: トリガーの名前は t1、トリガー時間は after、監視アクションは insert、ord テーブルの監視、各行については最後に説明します。ここでは覚えておいてください。begin と end の間にトリガー イベントを記述します。ここに更新ステートメントがあります。つまり、どのような注文をしても、商品番号 1 の商品の在庫数は 2 減少します。 注意: MySQL のデフォルトの実行終了マークは ; であるため、上記のコードを最初に実行しないでください。上記の SQL 文を実行すると、MySQL は ; に遭遇すると自動的に実行を停止し、end 文は実行されません。そのため、まずは MySQL の終了識別子を他の文字に変更する必要があります。一般的には、$ または $$ が使用されます。ここでは、実行の終了識別子として $ が使用されます。 MySQL 実行の終了マークを変更するには、次のステートメントを使用します。 delimiter $ //MySQL 実行終了マークを設定します。デフォルトは; 4. 既存のトリガーを表示および削除する (1)既存の 5. トリガー内の行変数を参照する (1) トリガーターゲットで挿入操作を実行すると、新しい行が作成されます。トリガーイベントで新しい行の変数が必要な場合は、new キーワードを使用してこれを示すことができます。 (2) トリガーターゲットで削除操作を実行すると、古い行が作成されます。トリガーイベントで古い行の変数が必要な場合は、old キーワードを使用してこれを示すことができます。 (3) トリガーターゲットで更新操作を実行すると、元のレコードが古い行になり、新しいレコードが新しい行になります。new キーワードと old キーワードを使用して、それぞれ操作することができます。 注文が行われると、対応する商品の在庫を減らし、トリガーを作成します。 トリガー t2 を作成する 後 入れる オンオード 各行ごとに 始める 商品を更新します。num=num-new.much、gid=new.gid を設定します。 終了$ 注文を削除する場合は、対応する変更された商品の在庫を増やし、トリガーを作成します。 トリガー t3 を作成する 後 消去 オンオード 各行ごとに 始める 商品を更新します。num=num+old.much、gid=old.gid です。 終了$ 注文の購入数量が更新されると、対応する商品の在庫数量が変更され、トリガーが作成されます。 トリガー t4 を作成する 前に アップデート オンオード 各行ごとに 始める 商品を更新します。num=num+old.much-new.much、gid = new.gid; 終了$ 6. 後と前の違い after 操作は、監視アクションが実行された後にイベントをトリガーします。
トリガーを作成します。 トリガー t5 を作成する 前に 入れる オンオード 各行ごとに 始める restNum int を宣言します。 gid = new.gid である goods から num を restNum に選択します。 new.much > restNum の場合 new.much = restNum; を設定します。 終了の場合; 商品を更新します。num=num-new.much、gid=new.gid を設定します。 終了$ 注意: ここで after を使用すると、エラーが報告されます。 after を使用すると、最初に挿入操作が実行され、つまり注文操作が挿入され、次に注文数量と在庫が判断されて新しい注文数量が取得されます。ただし、注文操作は実行されているため、エラーが報告されます。ここでは before 操作を使用する必要があります。 7. 各行の目的は何ですか? Oracleトリガーでは、トリガーは行トリガーと文トリガーに分けられます。 例えば: トリガーtnを作成 後 アップデート xxtableで 各行 #各行が影響を受け、行トリガーと呼ばれるトリガーイベントが実行されます sqlN; 終了$ 埋め込む: xxtable を更新し、id>100 の場合に xxx=xxx を設定します。 変更操作に 100 行が関係すると仮定すると、sqlN は何回トリガーされますか?回答: 100 回発動します。 拡大する: Oracle では、for each row が記述されていない場合、更新ステートメントによって一度に影響を受ける行の数に関係なく、トリガー イベントは 1 回だけ実行されます。 MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL トランザクション操作スキル」、「MySQL ストアド プロシージャ スキル」、「MySQL データベース ロック関連スキルの概要」、および「MySQL 共通関数の概要」 この記事が皆様のMySQLデータベース設計に役立つことを願っています。 以下もご興味があるかもしれません:
|
<<: React でカレンダー コンポーネントを構築するためのステップ バイ ステップ ガイド
>>: Ubuntu 18.04 Server バージョンのインストールと使用方法 (画像とテキスト)
この記事では、パズルゲームを実装するためのjsの具体的なコードを参考までに共有します。具体的な内容は...
記事のタイトルが「模造虫眼鏡」なのはなぜですか?今日お話ししたいのは、一般的に言われているような、マ...
1. /etc ディレクトリ内の、文字以外の文字で始まり、その後に文字と任意の長さのその他の文字が続...
目次序文知る練習すれば完璧になる序文wabpack では、ローダーの他にプラグインがコア機能です。プ...
目次目的モジュールのインストール基本的な使い方ポートをスキャンする開いているポートデータの送信データ...
インデックスの簡単な紹介は次のとおりです。インデックスを追加する目的は、データベース クエリのパフォ...
1. Dockerのインストールと設定 #CentOS をインストールし、Docker パッケージを...
リンクを使用する必要がある場合もありますが、リンクする必要はありません。onclick イベントを処...
Docker Swarm は、Docker によって開発されたコンテナ クラスター管理サービスです。...
1.VirtualBoxソフトウェアをダウンロードしてインストールするまず、VirtualBox の...
この機能を実装するにあたり、本家ブロガーさんから拝借した方法では色の切り替えが実現できず、長い間考え...
目次1. カスタム指示とは何ですか? 2. 指示をカスタマイズする方法フック機能3. 応用シナリオ入...
1. はじめにイメージマップを使用すると、画像の領域をホットスポットとして指定できます。この領域にマ...
<br />前回のCSSに関する記事は、多くの人にあまり理解されませんでした。そのため、...
この記事では、Docker コマンドの使用とインストールについては説明しません。Docker を基礎...