トリガーは特殊なタイプのストアド プロシージャであり、前に紹介したストアド プロシージャとは異なります。トリガーは主にイベントによってトリガーされ、自動的に呼び出されて実行されます。ストアド プロシージャは、ストアド プロシージャの名前で呼び出すことができます。
トリガーの主な機能は、参照整合性よりも複雑な 2 つ以上のテーブル間でデータの整合性と整合性を実現することです。これにより、テーブル内のデータの変更がデータベース設計者のルールによって決定されたビジネスに確実に準拠するようになります。
トリガーは、テーブルの挿入、更新、削除時に自動的に実行される特殊なストアド プロシージャです。トリガーは通常、より複雑なチェック制約を持つ制約で使用されます。
トリガーと通常のストアド プロシージャの違いは、トリガーが特定のテーブルに対して動作することです。更新、挿入、削除などの操作中に、システムはテーブル上の対応するトリガーを自動的に呼び出して実行します。
SQL Server 2005 のトリガーは、DML トリガーと DDL トリガーの 2 つのカテゴリに分類できます。DDL トリガーは、さまざまなデータ定義言語ステートメントに影響を与え、これらのステートメントには、create、alter、drop ステートメントがトリガーされます。
DML トリガーは次のように分類されます:
1. トリガー後 (後にトリガー)
a. トリガーの挿入
c. トリガーの代わりに (トリガー前に)
3 差分 f.トリガーは、特定の操作 (挿入、更新、削除) を実行した後にのみトリガーされる必要があり、テーブルでのみ定義できます。
定義された操作 (挿入、更新、削除) は実行されず、トリガー自体のみが実行されることを意味します。トリガーの代わりに、テーブルまたはビューにトリガーを定義できます。
挿入テーブルと削除テーブル
(1) 挿入されたテーブルは、INSERT または UPDATE ステートメントの影響を受ける行のコピーを保存するために使用されます。挿入または更新操作が実行されると、トリガーをアクティブ化する新しいデータ行がベース テーブルと挿入テーブルの両方に追加されます。
(2) 削除されたテーブルは、削除または更新ステートメントの影響を受ける行のコピーを保存するために使用されます。削除または更新操作が実行されると、指定された元のデータ行が実表から削除され、削除された表に転送されます。一般に、実表と削除された表には同じデータ行は存在しません。更新操作は 2 つのステップに分かれています。基本テーブルのデータ行を削除されたテーブルにコピーし、変更された新しいデータ行を挿入されたテーブルから基本テーブルにコピーします。つまり、更新操作の場合、削除されたテーブルには変更前の古い値が格納され、挿入されたテーブルには変更後の新しい値が格納されます。
トリガー作成構文の 4 つの要素:
1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete)
構文:
delimiter &&create trigger trigger Nameafter/before insert/update/delete on 表名 for each row #这句话在mysql是固定的 beginsql语句; end&&
商品テーブル
mysql> create table g( -> id int auto_increment primary key, -> name varchar(10), -> num int -> );
注文テーブル
mysql> create table o( -> idd int auto_increment primary key, -> gid int, -> much int -> );
商品の挿入:
mysql> insert into g (name,num) value ('juzi',20);mysql> select * from g; +----+------+------+| id | name | num | +----+------+------+| 3 | juzi | 20 | +----+------+------+
トリガーを使用しなかった場合: 今、3 つの商品を販売したとします。 2 つのことを行う必要があります
1. 注文テーブルにレコードを挿入します
insert into o(gid,much) values(1,3);
2. 製品テーブルの品目 1 の残り数量を更新します
update g set num=num-3 where id=1;トリガーを作成します:
delimiter & mysql> create trigger trg1 -> after insert on o -> for each row -> begin -> update g set num = num -3 where id = 1; -> end&
実行:
insert into o(gid,much) values(1,3)$
結果:
製品 1 の数量が 7 に変更されたことがわかります。これは、注文を挿入すると、トリガーが自動的に更新操作を実行することを意味します。
しかしここで問題が発生しました。トリガーの num と id がハードコーディングされているため、どの製品を購入しても、最終的には製品 1 の数量が更新されます。たとえば、別のレコードを注文テーブルに挿入します。 insert into o(gid,much) names(2,3) を実行すると、製品 1 の数量は 4 に変更されましたが、製品 2 の数量は変更されたことがわかります。これは明らかに私たちが望む結果ではありません。前に作成したトリガーを変更する必要があります。
create trigger tg2 after insert on o for each row begin update g set num=num-new.much where id=new.gid;(注意此处和第一个触发器的不同) end$2 番目のトリガーが作成されました。まず最初のトリガーを削除しましょうdrop トリガー tg1$ もう一度テストして注文レコードを挿入しましょう :insert into o(gid, much)values(2,3)$ 実行後、製品 2 の数量が 7 に変更されていることがわかります。これは現在では正しいことです。 まだ 2 つの状況があります:
1.当用户撤销一个订单的时候,我们这边直接删除一个订单,我们是不是需要把对应的商品数量再加回去呢?
2.当用户修改一个订单的数量时,我们触发器修改怎么写?
我们先分析一下第一种情况:
监视地点:o表
监视事件:delete
触发时间:after
触发事件:update
对于delete而言:原本有一行,后来被删除,想引用被删除的这一行,用old来表示,old.列名可以引用被删除的行的值。
那我们的触发器就该这样写:
create trigger tg3 after delete on o for each row begin update g set num = num + old.much where id = old.gid;(注意这边的变化) end$
创建完毕。
再执行
delete from o where oid = 2$
会发现商品2的数量又变为10了。
第二种情况:
监视地点:o表
监视事件:update
触发时间:after
触发事件:update
对于update而言:被修改的行,修改前的数据,用old来表示,old.列名引用被修改之前行中的值;
修改的后的数据,用new来表示,new.列名引用被修改之后行中的值。
那我们的触发器就该这样写:
create trigger tg4 after update on o for each row begin update g set num = num+old.much-new.much where id = old/new.gid; end$
先把旧的数量恢复再减去新的数量就是修改后的数量了。
我们来测试下:先把商品表和订单表的数据都清掉,易于测试。
假设我们往商品表插入三个商品,数量都是10,
买3个商品1:
insert into o(gid,much) values(1,3)$
这时候商品1的数量变为7;
我们再修改插入的订单记录:
update o set much = 5 where oid = 1$
我们变为买5个商品1,这时候再查询商品表就会发现商品1的数量只剩5了,说明我们的触发器发挥作用了。
以上就是 【MySQL 12】触发器的内容,更多相关内容请关注PHP中文网(www.php.cn)!

MySQLは、初心者がデータベーススキルを学ぶのに適しています。 1.MySQLサーバーとクライアントツールをインストールします。 2。selectなどの基本的なSQLクエリを理解します。 3。マスターデータ操作:テーブルを作成し、データを挿入、更新、削除します。 4.高度なスキルを学ぶ:サブクエリとウィンドウの関数。 5。デバッグと最適化:構文を確認し、インデックスを使用し、選択*を避け、制限を使用します。

MySQLは、テーブル構造とSQLクエリを介して構造化されたデータを効率的に管理し、外部キーを介してテーブル間関係を実装します。 1.テーブルを作成するときにデータ形式と入力を定義します。 2。外部キーを使用して、テーブル間の関係を確立します。 3。インデックス作成とクエリの最適化により、パフォーマンスを改善します。 4.データベースを定期的にバックアップおよび監視して、データのセキュリティとパフォーマンスの最適化を確保します。

MySQLは、Web開発で広く使用されているオープンソースリレーショナルデータベース管理システムです。その重要な機能には、次のものが含まれます。1。さまざまなシナリオに適したInnodbやMyisamなどの複数のストレージエンジンをサポートします。 2。ロードバランスとデータバックアップを容易にするために、マスタースレーブレプリケーション機能を提供します。 3.クエリの最適化とインデックスの使用により、クエリ効率を改善します。

SQLは、MySQLデータベースと対話して、データの追加、削除、変更、検査、データベース設計を実現するために使用されます。 1)SQLは、ステートメントの選択、挿入、更新、削除を介してデータ操作を実行します。 2)データベースの設計と管理に作成、変更、ドロップステートメントを使用します。 3)複雑なクエリとデータ分析は、ビジネス上の意思決定効率を改善するためにSQLを通じて実装されます。

MySQLの基本操作には、データベース、テーブルの作成、およびSQLを使用してデータのCRUD操作を実行することが含まれます。 1.データベースの作成:createdatabasemy_first_db; 2。テーブルの作成:createTableBooks(idintauto_incrementprimarykey、titlevarchary(100)notnull、authorvarchar(100)notnull、published_yearint); 3.データの挿入:InsertIntoBooks(タイトル、著者、公開_year)VA

WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

MySQLデータベースを構築する手順には次のものがあります。1。データベースとテーブルの作成、2。データの挿入、および3。クエリを実行します。まず、createdAtabaseおよびcreateTableステートメントを使用してデータベースとテーブルを作成し、InsertINTOステートメントを使用してデータを挿入し、最後にSelectステートメントを使用してデータを照会します。

MySQLは、使いやすく強力であるため、初心者に適しています。 1.MYSQLはリレーショナルデータベースであり、CRUD操作にSQLを使用します。 2。インストールは簡単で、ルートユーザーのパスワードを構成する必要があります。 3.挿入、更新、削除、および選択してデータ操作を実行します。 4. Orderby、Where and Joinは複雑なクエリに使用できます。 5.デバッグでは、構文をチェックし、説明を使用してクエリを分析する必要があります。 6.最適化の提案には、インデックスの使用、適切なデータ型の選択、優れたプログラミング習慣が含まれます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

メモ帳++7.3.1
使いやすく無料のコードエディター

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。
