トリガーの紹介トリガーは、テーブルに関連付けられた特別なストアド プロシージャであり、テーブル内のデータが挿入、削除、または変更されたときにトリガーされて実行されます。トリガーには、データベース自体の標準機能よりも高度で複雑なデータ制御機能があります。 トリガーの利点:
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 キャンバス
目次セットは値が重複しない特別なコレクションです。セットコレクション基本API独自の価値判断セットを...
目次1. プロトタイプとプロトタイプチェーンの平等関係を理解する2: プロトタイプとプロトタイプ チ...
目次序文インデックス プッシュダウンとは何ですか?インデックスプッシュダウン最適化の原理インデックス...
目次VUEとはVueのコアプラグインVueルーターヴュークスアクシオス要素UI Vue フロントエン...
多くの場合、透明度の設定やぼかしなど、写真の背景を加工する必要があります。 ただし、背景画像が配置さ...
1. 最近、Ubuntu の新しいバージョンをインストールしました。/etc/ssh/sshd_co...
問題 [root@zh ~]# [root@zh ~]# [root@zh ~]# yum -y d...
目次1. カスタム指示1. グローバルカスタム指示を登録する2. グローバルカスタム指示を使用する3...
1. Animate.css の紹介Animate.css は、Web プロジェクトですぐに使用で...
キーボードで文字を入力すると、対応するプロセスにどのように送信されるのでしょうか? ps や who...
場合によっては、データ内のデータを再利用する必要がありますが、データ内のデータはさまざまなフォーム、...
1. GitLabイメージをダウンロードする docker pull gitlab/gitlab-c...
フロートはWebページのレイアウトでよく使用されますが、フローティングブロックレベル要素は標準のドキ...
HTML は Hypertext Markup Language の略です。現在、ほとんどの Web...
ある達人がかつて、自分の妻のことを知るのと同じくらい、自分が管理するデータベースのことを知るべきだと...