だから私はこのような2つのテーブルを持っています...
ext_words
-------------
| id | Word |
-------------
| 1 | this |
-------------
| 2 | that |
-------------
| 3 | this |
-------------
ext_words_count
---------------------
| id | Word | count |
---------------------
| 1 | this | 2 |
---------------------
| 2 | that | 1 |
---------------------
私は次のようなトリガーを作成しようとしています:
ext_words_count.count
が更新されたときにext_words.Word
を更新します。問題をさらに複雑にするために、
ext_words.Word
が更新されたときにext_words_count
がext_words
に存在しない場合、ext_words_count
に挿入し、count
を1に設定します。私は同様の質問を見てきました:
1。 自動増分フィールドを使用してトリガーを挿入する前/後 、および
2。 トリガーを使用して別のデータベースのテーブルを更新する
2を組み合わせようとしています。
DELIMITER $$
CREATE TRIGGER update_count
AFTER UPDATE ON ext_words
FOR EACH ROW
BEGIN
UPDATE ext_words_count
SET Word_count = Word_count + 1
WHERE Word = NEW.Word;
END;
$$
DELIMITER ;
アドバイスや方向性は大歓迎です。またはおそらく私が見落としていた別の方法といつものように事前に感謝します!
更新:
MySQLの条件ステートメントにあまり精通していないため、INSERTとUPDATEの2つのトリガーを使用することを選択しました。
DELIMITER $$
CREATE TRIGGER insert_Word AFTER INSERT ON ext_words
FOR EACH ROW
BEGIN
INSERT IGNORE INTO ext_words_count (Word) VALUES (NEW.Word);
END;
$$
DELIMITER ;
そして
DELIMITER $$
CREATE TRIGGER update_Word AFTER UPDATE ON ext_words
FOR EACH ROW
BEGIN
UPDATE ext_words_count
SET Word_count = Word_count + 1
WHERE Word = NEW.Word;
END;
$$
DELIMITER ;
INSERTクエリはうまく機能していますが、UPDATEクエリはWord_count
を更新していません。更新クエリで見逃したものはありますか?
Grijeshの完璧な助けと条件付きステートメントの使用の提案により、両方のタスクを実行する[〜#〜] one [〜#〜]トリガーを取得することができました。もう一度感謝します
DELIMITER $$
CREATE TRIGGER update_count AFTER INSERT ON ext_words
FOR EACH ROW
BEGIN
IF NOT EXISTS (SELECT 1 FROM ext_words_count WHERE Word = NEW.Word) THEN
INSERT INTO ext_words_count (Word) VALUES (NEW.Word);
ELSE
UPDATE ext_words_count SET Word_count = Word_count + 1 WHERE Word = NEW.Word;
END IF;
END $$
DELIMITER;
カウントのようなキーワードの使用は、SQLメソッドによって作成エラーが使用されますが、一部は正常に実行されるため、使用しないでください。
DELIMITER $$
CREATE TRIGGER update_count
AFTER UPDATE ON ext_words
FOR EACH ROW
BEGIN
SELECT count INTO @x FROM ext_words_count LIMIT 1;
UPDATE ext_words_count
SET count = @x + 1
WHERE Word = NEW.Word;
END;
$$
DELIMITER ;