Я согласен с другими ответами и комментариями, что сложно использовать триггеры, чтобы количество комментариев обновлялось идеально. Вы могли бы подумать, что это будет надежно, но на практике это не так.
Но чтобы ответить на ваш вопрос, вот демо:
Я создал таблицы, как вы показываете в своем вопросе, а затем добавьте строку в сообщения:
insert into posts set post_id = 1, post_subject = 'subject';
Вот триггер:
create trigger updNumberOfComments after insert on comments
for each row
update posts set numberOfComments = COALESCE(numberOfComments, 0) + 1
where post_id = NEW.post_id;
Этот триггер является просто одним оператором, поэтому я смог написать его без блока BEGIN...END
. Но если вы делаете что-то, что требует блока, то вы должны прочитать о , используя DELIMITER .
Затем добавьте несколько комментариев:
insert into comments set comment_id = 1, comment_text = 'comment 1', post_id = 1;
insert into comments set comment_id = 2, comment_text = 'comment 2', post_id = 1;
insert into comments set comment_id = 3, comment_text = 'comment 3', post_id = 1;
Подтвердите, что он увеличил количество комментариев:
select * from posts;
+---------+--------------+------------------+
| post_id | post_subject | numberOfComments |
+---------+--------------+------------------+
| 1 | subject | 3 |
+---------+--------------+------------------+