私は行のデータ値がチェックされているので、同じ名前の行を持つテーブルから別のテーブルに行を転送するトリガーを作成する必要があります。これは、何かが挿入または変更されたときに起こるはずです。何か案は?テーブルからindentical他のテーブルに行を移動するMysqlのトリガー
0
A
答えて
0
MySQLエラー1442:
エラーコード:それはすでにこのストアド 機能/トリガーを呼び出したステートメントによって使用されているため、1442が格納されている機能/トリガ にテーブル「XYZ」を更新できません。
トリガコールがカスケード接続または再帰的な場合は、同じコールスタック内にあることをサーバが認識しているために発生します。
あなたが選べる頻度を選ぶイベントクリーンアップ戦略を活用することが最善の方法です。それを使用する場合は、グローバルイベントスケジューラを利用することを忘れないでください。実行中であることを忘れることはできません。また、ほとんどの共有ホスティング環境では、リソースが共有されているためにイベントがサポートされません(人々はそれらを悪用する傾向があり、すべての人に影響を与えます)。前記
、
スキーマ:
create table orig101
( id int auto_increment primary key,
thing1 varchar(100) not null,
checked int not null
);
create table copy101
( id int primary key,
thing1 varchar(100) not null,
checked int not null
);
イベント:
DROP EVENT IF EXISTS cleanUpCopied;
DELIMITER $$
CREATE EVENT cleanUpCopied
ON SCHEDULE EVERY 2 MINUTE STARTS '2016-01-01 00:00:00'
ON COMPLETION PRESERVE
DO
BEGIN
DELETE FROM orig101 WHERE checked=1;
END $$
DELIMITER ;
-- -------------------------------------------------
select @@event_scheduler; -- mine is currently OFF
SET GLOBAL event_scheduler = ON; -- turn her on and confirm below
select @@event_scheduler; -- yep it is ON
トリガ:
DROP TRIGGER IF EXISTS aft_ins_orig;
delimiter $$
CREATE TRIGGER aft_ins_orig AFTER INSERT ON orig101
FOR EACH ROW
BEGIN
IF NEW.checked=1 THEN
INSERT IGNORE copy101 (id,thing1,checked)
SELECT NEW.id,NEW.thing1,NEW.checked;
END IF;
END;$$
delimiter ;
-- -------------------------------------------------
DROP TRIGGER IF EXISTS aft_upd_orig;
delimiter $$
CREATE TRIGGER aft_upd_orig AFTER UPDATE ON orig101
FOR EACH ROW
BEGIN
IF NEW.checked=1 THEN
INSERT IGNORE copy101 (id,thing1,checked)
SELECT NEW.id,NEW.thing1,NEW.checked;
END IF;
END;$$
delimiter ;
試験:
truncate orig101;
truncate copy101;
INSERT orig101 (thing1,checked) values ('frog',0);
select * from orig101; -- 1 row
select * from copy101; -- 0 rows
INSERT orig101 (thing1,checked) values ('fish',1); -- when evt fires, cleanup occurs
select * from orig101; -- until evt fires, checked=1 row(s) still there
select * from copy101;
INSERT orig101 (thing1,checked) values ('fish2',1); -- when evt fires, cleanup occurs
INSERT orig101 (thing1,checked) values ('fish3',1); -- when evt fires, cleanup occurs
INSERT orig101 (thing1,checked) values ('fish4',1); -- when evt fires, cleanup occurs
INSERT orig101 (thing1,checked) values ('fish5',1); -- when evt fires, cleanup occurs
select * from orig101; -- until evt fires, checked=1 row(s) still there
select * from copy101;
UPDATE orig101 set checked=1 where id=1;
-- Tweak the frequency of event firing (say every minute, or every hour, whatever)
私のイベントのプロフィールページから約3つのリンクがあります。がんばろう。
関連する問題
- 1. Mysqlの大きなテーブルでテーブルから他のデータに移動する方法
- 2. MySQLのあるテーブル行から別のテーブル行にデータを移動
- 3. MySQLはあるテーブルから別のテーブルにランダムな行を移動します
- 4. Mysql - 新しいテーブルに行が存在しない場合、あるテーブルから別のテーブルに移動する
- 5. web2pyテーブルをmysqlに移行
- 6. mysql - 挿入後に他のテーブルにデータを挿入するトリガー
- 7. PHP mysqlテーブルがテーブルに移動
- 8. MySQLテーブル間で行を移動
- 9. PHP他のテーブルのIDからMySQLテーブルをクエリする
- 10. MySQLトリガー:テーブルからの削除
- 11. DBFlow:他のデータベースからテーブルを移行する方法は?
- 12. 他のテーブルの中でテーブルを移動する方法
- 13. MySqlのテーブルとトリガー
- 14. 他のテーブルから同じテーブルを更新するmysqlトリガ
- 15. あるテーブルから別のテーブルにデータを移動する
- 16. MySQLテーブルの行を別のテーブルに集約するためのトリガー
- 17. MySQLテーブルのデータをスケジュール上の新しいテーブルに移動
- 18. 他のテーブルの行に基づくMySQLテーブルの値の比較
- 19. Chromeのテーブルの行を移動する(テーブルが破損する)
- 20. MySQL他のテーブルから選択
- 21. 一つのテーブルから他のテーブルへのMySQLデータ
- 22. MySQLのあるデータベースから別のデータベースへテーブルを移動するには?
- 23. トリガーmysql未知のテーブル
- 24. Laravel 5で古いテーブルから新しいテーブルに移行するデータ移行
- 25. mysqlの他のテーブルから合計を挿入するには?
- 26. Laravelでテーブルから別のテーブルにデータを移動
- 27. あるテーブルから別のテーブルにテーブル行を移動する最も効率的な方法
- 28. rails3移行だからテーブル
- 29. cakephpのあるテーブルから他のテーブルにデータベース行をコピーするには
- 30. C#; 1つの(HTML)テーブルから別のテーブルに移動
「コピーされた」のように「元のテーブルにこれ以上持たない」または「移動しました」のように「移動」されていますか? "newtable(col1、col2、...)を選択してnew.col1、new.col2、...を選択してトリガーで行うことができます。 – Solarflare
基本的には、すべてのトリガーでそれを行う – Drew
トリガーやイベントのコンボでそれを行う方法を私に教えたいなら、 – Drew