私はMySQLにデータベースを持っています。ここにそれを作成するSQLクエリですhttp://paste.org.ru/?xzctqi行を挿入した後に列の値をインクリメントするトリガを作成する方法は?
ここにメインテーブルbooks
です。私がする必要があるのは、本を追加するときに、出版社IDを選択することだけです。ブックを追加した後、このテーブルのすべてのレコードをループし、現在追加されている行と同じパブリッシャを持つすべての行に対してインクリメントカラムpublisher_books_amount
を追加する必要があります。
+----+-------+--------+------------------------+-----------+
| id | title | author | publisher_books_amount | publisher |
+----+-------+--------+------------------------+-----------+
| 1 | Book1 | 1 | 0 | 1 |
| 2 | Book2 | 2 | 0 | 1 |
| 3 | Book3 | 1 | 0 | 2 |
| 4 | Book4 | 3 | 0 | 3 |
| 5 | Book1 | 3 | 0 | 1 |
+----+-------+--------+------------------------+-----------+
私はトリガー
DROP TRIGGER IF EXISTS `insert_trigger`;
DELIMITER |
CREATE TRIGGER `insert_trigger` AFTER INSERT ON books
FOR EACH ROW
BEGIN
UPDATE books SET publisher_books_amount = (publisher_books_amount + 1)
WHERE publisher = NEW.publisher;
END;
|
DELIMITER ;
を作成しました。しかし、私は本を追加しようとしているとき、MySQLはエラーを私に提供します。それは は既にこのストアド・ファンクション/トリガーを呼び出したステートメントで使用されているため
は/保存機能でトリガーをテーブル「ブック」を更新できません。
なぜ非正規化DBになっているのですか?私はちょうど上記の構造が必要です。
私は行を削除して更新した後に同じトリガを作成する必要があります。それに何か問題がある場合は、それも私を助けることができますか?
よろしくお願いいたします。