トリガーの紹介トリガーは、テーブルに関連付けられた特別なストアド プロシージャであり、テーブル内のデータが挿入、削除、または変更されたときにトリガーされて実行されます。トリガーには、データベース自体の標準機能よりも高度で複雑なデータ制御機能があります。 トリガーの利点:
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 で特定のフィールドからスペースを一括削除する方法はありますか?文字列の前後のスペースだけ...
1. 戻るボタンhistory.back() を使用してブラウザの「戻る」ボタンを作成します。 &l...
序文ストレス テスト中に、リソース使用のボトルネックによって発生する最も直接的なパフォーマンスの問題...
目次序文1. イベントとクリップボードを貼り付ける2. クリップボード内のコンテンツ形式3. HTM...
位置 / { インデックス index.jsp; proxy_next_upstream http...
最近、分散型およびビッグデータ技術について学ぶために、いくつかの仮想マシンに取り組んでいます。まず、...
[インターネット上の移行ファイルをすべて見ると、信頼性が低く、症状のみを治療し、根本的な原因を治療し...
reactプロジェクトで非常に一般的なシナリオ: const [watchValue、setWatc...
Vueはパンくずコンポーネントをカプセル化して参照します。具体的な内容は次のとおりです。効果を達成す...
1 MySQL5.6 1.1 関連パラメータMySQL 5.6 では、innodb_undo_dir...
目次1.ライフサイクルとは何か2. Vueのライフサイクル3. ライフサイクルフック関数1.ライフサ...
1. ブロックレベル要素: 独立して存在できる能力を指します。通常、ブロックレベル要素は改行によって...
ここ2日間ちょっと忙しくて、公式アカウントも数日更新が止まってしまいました。その結果、何人かの読者か...
1. my.iniファイルを手動で作成して追加する # クライアントセクション # --------...
序文hover疑似クラスが要素に境界線を追加すると、要素内のコンテンツがずれることがあります。box...