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コード 試して見てください
------解決策------------------
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>