トリガーの紹介トリガーは、テーブルに関連付けられた特別なストアド プロシージャであり、テーブル内のデータが挿入、削除、または変更されたときにトリガーされて実行されます。トリガーには、データベース自体の標準機能よりも高度で複雑なデータ制御機能があります。 トリガーの利点:
MySQL でのトリガーの使用トリガーを作成する トリガーを作成するコツは、トリガーの 4 つの要素を覚えておくことです。
トリガーを作成するための基本的な構文は次のとおりです。 トリガーを作成 -- trigger_name: トリガーの名前。 -- tirgger_time: トリガー時間、BEFORE または AFTER; -- trigger_event: トリガー イベント。INSERT、DELETE、または UPDATE のいずれかになります。 トリガー名 トリガー時間 トリガーイベント の上 -- tb_name: トリガーが作成されるテーブル名と、トリガーが作成されるテーブルを示します。 tb_name -- FOR EACH ROW は、トリガー イベントを満たすレコードに対するすべての操作がトリガーをトリガーすることを意味します。 各行ごとに -- trigger_stmt: トリガーの本体。単一の SQL ステートメント、または BEGIN と END で囲まれた複数のステートメントになります。 トリガーステートメント
注意: 同じテーブル内の同じトリガー時間を持つ同じトリガー イベントに対しては、トリガーを 1 つだけ定義できます。 新しいレコードと古いレコードをトリガーする NEW と OLD は、トリガーが配置されているテーブル内でトリガーをトリガーしたデータの行を示すために MySQL で定義されています。
ユーザーが製品を購入したときに対応する製品在庫レコードを更新するトリガーを作成します。コードは次のとおりです。 -- トリガーを削除します。トリガー名をドロップします -- 存在する場合は、存在する場合にのみ削除されます。ドロップ トリガーが存在する場合、myty1 が存在する場合; -- トリガーを作成します。create trigger mytg1 -- myty1 トリガーの名前 after insert on orders -- トリガーを作成するテーブルを指定します。 各行ごとに 始める 製品セット num を num-new.num に更新します (pid は new.pid です)。 終わり; --注文テーブルにレコードを挿入します。 insert into orders values(null,2,1); -- 製品テーブル内の製品の在庫更新ステータスを照会します。select * from product; ユーザーが注文を削除したときに対応する製品在庫レコードを更新するトリガーを作成します。コードは次のとおりです。 -- トリガーを作成する トリガーを作成する mytg2 注文の削除後 各行ごとに 始める -- インベントリをロールバックし、更新製品を再度追加します。セット num = num+old.num、pid=old.pid; 終わり; -- 注文レコードを削除します。delete from orders where oid = 2; -- 製品テーブル内の製品の在庫更新ステータスを照会します。select * from product; 以前と以後の違い before ステートメントを実行する前 after ステートメントを実行した後 注文数量が在庫を超える場合は、注文数量を最大在庫に合わせて変更します。 -- -- 事前トリガーを作成する create trigger mytg3 注文に挿入する前に 各行ごとに 始める -- 在庫を受け取る変数を定義します。declare n int default 0; -- 在庫を照会し、num を n に割り当てる pid = new.pid の場合、製品から num を n に選択します。 -- 注文数量が在庫より大きいかどうかを判定します。new.num>nの場合、 -- 変更注文在庫より大きい(在庫が最大数量に変更されました) new.num = n を設定します。 終了の場合; 製品セット num を num-new.num に更新します (pid は new.pid です)。 終わり; --注文テーブルにレコードを挿入します。 insert into orders values(null,3,50); -- 製品テーブル内の製品の在庫更新ステータスを照会します。select * from product; -- 注文テーブルを照会します。select * from orders; カーソルカーソルの紹介 カーソルの機能は、データベースを照会して返されたレコードを走査し、対応する操作を実行することです。カーソルには次の特性があります。
カーソルの作成 カーソルを作成するための構文は、次の 4 つの部分で構成されます。
カーソルを使用して、テスト データベースの学生テーブルの最初の学生情報を返すプロシージャ p1 を作成します。コードは次のようになります。 -- プロシージャを定義する create procedure p1() 始める id int を宣言します。 名前を宣言するvarchar(20); age int を宣言します。 -- カーソルを定義します。カーソル名を宣言します。カーソルは select ステートメント用です。 select * from student の mc カーソルを宣言します。 -- カーソルを開きます open cursor name; オープンMC; -- カーソル名を変数名 [, 変数名] に取得します。 mc を id、name、age に取得します。 -- 選択した ID、名前、年齢を印刷します。 -- カーソルを閉じる close mc; 終わり; -- プロシージャを呼び出します call p1(); テスト データベースに student2 テーブルを作成し、プロシージャ p2 を作成し、カーソルを使用して student テーブルからすべての学生情報を抽出し、それを student2 テーブルに挿入します。コードは次のようになります。 -- プロシージャを定義する create procedure p3() 始める id int を宣言します。 名前を宣言するvarchar(20); age int を宣言します。 フラグ int のデフォルトを 0 として宣言します。 -- カーソルを定義します。カーソル名を宣言します。カーソルは select ステートメント用です。 select * from student の mc カーソルを宣言します。 見つからない場合の継続ハンドラを宣言し、フラグを 1 に設定します。 -- カーソルを開きます open cursor name; オープンMC; -- カーソル名を変数名 [, 変数名] に取得します。 a:loop -- データを取得するためのループ fetch mc into id,name,age; フラグが1の場合、フェッチが失敗したときに継続ハンドラをトリガーします。 leave a;-- ループを終了する end if; -- 抽出されたデータの各行を走査して student2 テーブルに挿入します。 insert into student2 values(id,name,age); ループを終了します。 -- カーソルを閉じる close mc; 終わり; -- プロシージャ call p3() を呼び出します。 -- student2 テーブルをクエリします。select * from student2; 要約するこれで、MySQL のトリガーとカーソルに関するこの記事は終了です。MySQL のトリガーとカーソルに関する関連情報をさらに知りたい場合は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: スクラッチ宝くじの例を実現する JavaScript キャンバス
この記事では、例を使用して MySQL インデックスの原理と使用方法を説明します。ご参考までに、詳細...
不明な点があるときはいつでも、Blog Park にアクセスして、いつでも答えやインスピレーションを...
1. 従来のbinlogマスタースレーブレプリケーション、エラー報告をスキップする方法 mysql&...
最近、Web ページに複数の画像をアップロードするためのスクリプトを作成しました。これは非常に実用的...
フォーム送信コード1. ソースコード分析 <!DOCTYPE html> <htm...
1. golang:最新のベースイメージ mkdir gotest タッチメイン.go Docker...
レンダリング サンプルコード今日は、WeChat アプレットを使用して 2048 ゲームを実装します...
MySQL 結合クエリ1. 基本概念2 つのテーブルの各行をペアで水平に接続して、すべての行の結果を...
セキュリティ上の理由から、Alibaba Cloud Server ECS にはデフォルトで独自のセ...
ユーザーが目的のものを探すために前進するか後退するかを選択できるようにします。たとえば、Taobao...
B ツリーは一般的なデータ構造です。彼と一緒にB+ツリーがあります。ここで、概念を明確にする必要があ...
6つの効果実装コードhtml <h1>CSS 境界遷移</h1> <セ...
ミニプログラムデータキャッシュ関連知識データ キャッシュ: データをキャッシュして、アプレットを終了...
コードを書くとき、2 つのファイル間の違い、または同じファイルの異なるバージョン間の違いを知る必要が...
この記事では、二次リンクを実現するためのReactの具体的なコードを参考までに共有します。具体的な内...