ホームページ バックエンド開発 PHPチュートリアル 2 つのテーブル間にトリガーを作成する方法

2 つのテーブル間にトリガーを作成する方法

Jun 13, 2016 pm 01:24 PM
mysql

2 つのテーブル間にトリガーを作成するにはどうすればよいですか?
学生テーブル: 学生番号、名前、年齢、学科番号、学科名
学科テーブル: 学科番号、学科名、名前、年齢。

学生テーブルにレコードを追加する方法。それに応じて学科テーブルも自動的に追加されます。同様に、削除するにはどうすればよいですか?

-----解決策--------------------------------
もちろんです!
このブログ投稿 http://www.cnblogs.com/nicolas_f/archive/2009/09/22/1572050.html を参照してください。

成功したら結果を共有したいと思います。
------解決策----------------------
これまでにやったことがないので、行かせてください 他の人の例を見てください
マニュアルを読みなさいと言われたら、やりすぎではありませんか?
------解決策---------
区切り文字 //
DROP TRIGGER IF EXISTStrigger_on_tab1 //
CREATE TRIGGER TRIGGER_on_tab1
AFTER INSERT ON test1
FOR EACH ROW
BEGIN
insert into test2(test1_id,test1_name) value(new.id, new.name); 🎜 >END//

例、そこから学ぶことができます!

------解決策---------構文が間違っています。 SQL 文字列を投稿して見てください。

------解決策----------------------この記述は正しいです。問題があるはずです。区切り文字。
トリガーを実行する前にセクションを区切ります。変更してから作成します。
delimiter $
存在する場合はトリガーを削除します。 t_afterinsert_on_tab1$
トリガー t_afterinsert_on_tab1 を作成します。
TAB1 に挿入した後

begin
tab2(tab2_name) の値に挿入 (new.tab1_name);
end$
tab1 (tab1_name) の値に挿入 ('Zhang San')$
Thisコード 試して見てください

------解決策------------------

SQL コード

eshop の製品テーブルと注文テーブルを例に挙げます。
新しい製品テーブルを作成する
テーブルグッズを作成(
    id int auto_increment 主キー、#製品 ID
    name varchar(30) not null デフォルト '',#製品名
    num tinyint not null デフォルト 0 #商品の数量
) エンジン myisam デフォルトの文字セット utf8;
新しい注文を作成する
テーブルのインデントを作成(
    oid int auto_increment 主キー、#order id
    gid int null ではないデフォルト 0、#製品 ID
    much tinyint not null デフォルト 0 #購入数量
) エンジン myisam デフォルトの文字セット utf8;
mysql> 説明品;
+------+-------------+------+-----+---------+---- - -----------+
| フィールド タイプ | デフォルト |
+------+-------------+------+-----+---------+---- - -----------+
| int(11) | いいえ |
| 名前 |
| 数値 (4) |
+------+-------------+------+-----+---------+---- - -----------+
3列セット
mysql> 記述インデント;
+------+-----------+------+-----+---------+----- ----------+
| フィールド タイプ | デフォルト |
+------+-----------+------+-----+---------+----- ----------+
| いいえ | int(11) |
| 整数 (11) |
いいえ |
+------+-----------+------+-----+---------+----- ----------+
デモ データを挿入します。
商品の値に挿入します(1,'Samsung 携帯電話',12),(2,'iPad コンピューター',19),(3,'Motorola mp3',38);
mysql> select * from Goods;
+-----+-------------+-----+
| 名前 |
+-----+-------------+-----+
| サムスンの携帯電話 12 |
| iPad コンピューター |
| モトローラmp3 |
+-----+-------------+-----+
購入レコードを注文テーブルに手動で追加します。
indent(gid,much)values(3,2) に挿入します。
mysql> インデントから * を選択します。
+-----+-----+-----+
| イド |
+-----+-----+-----+
| 1 | 3 |
+-----+-----+-----+
セット内の 1 行
製品情報を製品テーブルに手動で削減します。
商品セット num=num-2 (id=3) を更新します。
mysql> select * from Goods;
+-----+-------------+-----+
| 名前 |
+-----+-------------+-----+
| サムスンの携帯電話 12 |
| iPad コンピューター |
| モトローラmp3 |
+-----+-------------+-----+
3列セット
mysql の終了文字を変更します。
mysql> 区切り文字 $
--------------------------------------------------
トリガーの作成
トリガー tg1 を作​​成する
挿入後 #挿入後のトリガー
インデント上
行ごとに#書き込み方法を修正
始める
商品セット num=num-1 (id=3) を更新します。
終わり
$
------------------------------------------
ユーザーの注文プロセスをシミュレートする
製品リスト:
+-----+-------------+-----+
| 名前 |
+-----+-------------+-----+
| サムスンの携帯電話 12 |
| iPad コンピューター |
| モトローラmp3 |
+-----+-------------+-----+
注文フォーム:
+-----+-----+-----+
| イド |
+-----+-----+-----+
| 1 | 3 |
+-----+-----+-----+
①注文する
indent(gid,much)values(2,4)$ に挿入
②オーダーフォームを見る
+-----+-----+-----+
| イド |
+-----+-----+-----+
| 1 | 3 |
| 2 | 2 |
+-----+-----+-----+
③商品リストを減らすべき
+-----+-------------+-----+
| 名前 |
+-----+-------------+-----+
| サムスンの携帯電話 12 |
| iPad コンピューター |
| モトローラmp3 |
+-----+-------------+-----+
結論: 明らかに、ユーザーは注文番号 2 を出し、4 つの商品を発注し、注文が生成されました。商品数が減らない、エラーが出る!--------------------------------------
トリガーを正しく作成します。
トリガー tg2 を作成する
挿入後
インデント上
各行ごとに
始める
商品セット num=num-new.much を更新します (id=new.gid;)。
終わり
$
----------------------------------発注挿入トリガー---------- -- --------------------------------

エラーが発生しました: テーブルを 2 つのトリガーで同時に監視できないため、最初に作成したトリガーを削除する必要があります。
mysql>tg1$ をドロップします
クエリは OK、影響を受ける行は 0 件です

mysql> トリガーを表示$
空の集合
商品の購入を開始します (注文フォームをクリアします):
mysql> select * from Goods;
    ->$
+-----+-------------+-----+
| 名前 |
+-----+-------------+-----+
| サムスンの携帯電話 12 |
| iPad コンピューター |
| モトローラmp3 |
+-----+-------------+-----+
3列セット

mysql> indent(gid,much)values(2,4)$ に挿入
クエリは OK、1 行が影響を受けました

mysql> select * from indent$ #注文は正常に完了しました
+-----+-----+-----+
| イド |
+-----+-----+-----+
| 1 | 2 |
+-----+-----+-----+
セット内の 1 行

mysql> select * from Goods$ #該当する商品が自動的に減額されます OK
+-----+-------------+-----+
| 名前 |
+-----+-------------+-----+
| サムスンの携帯電話 12 |
| iPad コンピューター |
| モトローラmp3 |
+-----+-------------+-----+
3列セット
------------------------------------------------注文をキャンセルするトリガーの削除--- ----------------------------------
トリガー tg3 を作成する
削除後
インデント上
各行ごとに
始める
商品セット num=num+old.much を更新します (id=old.gid;)。
終わり
$
注: 実際のプロジェクトでは、オーダーが物理的に削除されることはありません。
----------------------------------
注文のキャンセルをシミュレートします。
mysql> select * from Goods$
+-----+-------------+-----+
| 名前 |
+-----+-------------+-----+
| サムスンの携帯電話 12 |
| iPad コンピューター |
| モトローラmp3 |
+-----+-------------+-----+
3列セット

mysql>select * from indent$
+-----+-----+-----+
| イド |
+-----+-----+-----+
| 1 | 2 |
+-----+-----+-----+
セット内の 1 行

mysql> oid=1$ のインデントから削除
クエリは OK、1 行が影響を受けました

mysql>select * from indent$
空の集合

mysql> select * from Goods$
+-----+-------------+-----+
| 名前 |
+-----+-------------+-----+
| サムスンの携帯電話 12 |
| iPad コンピューター |
| モトローラmp3 |
+-----+-------------+-----+
3列セット
------------------------------------注文更新トリガーの変更--------- - -----------------------------
注文式を変更します。商品セット num=num+old.much-new.much を更新します (id=old.gid;)。
重要な部分: 新しい数量など = 独自の数量 + 変更された古い数量 - 新しく生成された数量 (完全な数学的論理)、ID は変更されません。
トリガー tg4 を作成する
アップデート後
インデント上
各行ごとに
始める
商品セット num=num+old.much-new.much を更新します (id=old.gid;)。
終わり
$
------------------------
mysql> select * from Goods$
+-----+-------------+-----+
| 名前 |
+-----+-------------+-----+
| サムスンの携帯電話 7 |
| iPad コンピューター |
| モトローラmp3 |
+-----+-------------+-----+
3列セット

mysql> インデントから * を選択
$
+-----+-----+-----+
| イド |
+-----+-----+-----+
| 2 | 1 |
+-----+-----+-----+
セット内の 1 行
mysql> インデントセット much=10 where oid=2$
クエリは OK、1 行が影響を受けました
一致した行: 1 変更された: 1 警告: 0

mysql> select * from Goods$
+-----+-------------+-----+
| 名前 |
+-----+-------------+-----+
| サムスンの携帯電話 2 |
| iPad コンピューター |
| モトローラmp3 |
+-----+-------------+-----+
3列セット

mysql>select * from indent$
+-----+-----+-----+
| イド |
+-----+-----+-----+
| 2 | 10 |
+-----+-----+-----+
セット内の 1 行
--------------------------------------------------
トリガーの基礎は完成しました!

テーブルをすばやくクリアします: truncate [テーブル名]
mysql の終了文字を変更します: 区切り文字 $;
トリガーの表示:トリガーの表示
トリガーの削除: トリガーを削除 [トリガー名]
トリガーを作成します。
トリガーを作成 [トリガー名]
[トリガー動作/挿入/更新/削除]後
[監視対象/あるテーブル]について
行ごとに#書き込み方法を修正
始める
    SQL ステートメント;
終わり
$
注: トリガーは、特定のテーブルの特定の動作にのみ対応できます。複数のトリガーでテーブルの同じ動作を監視することはできません。
 <div class="clear"></div>
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPのビッグデータ構造処理スキル PHPのビッグデータ構造処理スキル May 08, 2024 am 10:24 AM

ビッグ データ構造の処理スキル: チャンキング: データ セットを分割してチャンクに処理し、メモリ消費を削減します。ジェネレーター: データ セット全体をロードせずにデータ項目を 1 つずつ生成します。無制限のデータ セットに適しています。ストリーミング: ファイルやクエリ結果を 1 行ずつ読み取ります。大きなファイルやリモート データに適しています。外部ストレージ: 非常に大規模なデータ セットの場合は、データをデータベースまたは NoSQL に保存します。

PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? Jun 03, 2024 pm 08:11 PM

MySQL クエリのパフォーマンスは、検索時間を線形の複雑さから対数の複雑さまで短縮するインデックスを構築することで最適化できます。 PreparedStatement を使用して SQL インジェクションを防止し、クエリのパフォーマンスを向上させます。クエリ結果を制限し、サーバーによって処理されるデータ量を削減します。適切な結合タイプの使用、インデックスの作成、サブクエリの使用の検討など、結合クエリを最適化します。クエリを分析してボトルネックを特定し、キャッシュを使用してデータベースの負荷を軽減し、オーバーヘッドを最小限に抑えます。

PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? Jun 03, 2024 pm 12:19 PM

PHP で MySQL データベースをバックアップおよび復元するには、次の手順を実行します。 データベースをバックアップします。 mysqldump コマンドを使用して、データベースを SQL ファイルにダンプします。データベースの復元: mysql コマンドを使用して、SQL ファイルからデータベースを復元します。

PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? Jun 02, 2024 pm 02:26 PM

MySQLテーブルにデータを挿入するにはどうすればよいですか?データベースに接続する: mysqli を使用してデータベースへの接続を確立します。 SQL クエリを準備します。挿入する列と値を指定する INSERT ステートメントを作成します。クエリの実行: query() メソッドを使用して挿入クエリを実行します。成功すると、確認メッセージが出力されます。

MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 Dec 09, 2024 am 11:42 AM

MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? Jun 02, 2024 pm 02:13 PM

PHP で MySQL ストアド プロシージャを使用するには: PDO または MySQLi 拡張機能を使用して、MySQL データベースに接続します。ストアド プロシージャを呼び出すステートメントを準備します。ストアド プロシージャを実行します。結果セットを処理します (ストアド プロシージャが結果を返す場合)。データベース接続を閉じます。

PHP を使用して MySQL テーブルを作成するにはどうすればよいですか? PHP を使用して MySQL テーブルを作成するにはどうすればよいですか? Jun 04, 2024 pm 01:57 PM

PHP を使用して MySQL テーブルを作成するには、次の手順が必要です。 データベースに接続します。データベースが存在しない場合は作成します。データベースを選択します。テーブルを作成します。クエリを実行します。接続を閉じます。

Oracleデータベースとmysqlの違い Oracleデータベースとmysqlの違い May 10, 2024 am 01:54 AM

Oracle データベースと MySQL はどちらもリレーショナル モデルに基づいたデータベースですが、Oracle は互換性、スケーラビリティ、データ型、セキュリティの点で優れており、MySQL は速度と柔軟性に重点を置いており、小規模から中規模のデータ セットに適しています。 ① Oracle は幅広いデータ型を提供し、② 高度なセキュリティ機能を提供し、③ エンタープライズレベルのアプリケーションに適しています。① MySQL は NoSQL データ型をサポートし、② セキュリティ対策が少なく、③ 小規模から中規模のアプリケーションに適しています。

See all articles