CREATE TABLE posts(
id INT NOT NULL AUTO_INCREMENT,
title CHAR(40),
content TEXT,
public_date DATE,
PRIMARY KEY (id)
);
CREATE TABLE comments(
id INT NOT NULL AUTO_INCREMENT,
post INT,
autor CHAR(20),
text CHAR(100),
PRIMARY KEY (id)
);
Для автоматического удаления всех комментариев перед удалением записи создаем следующий триггер:
CREATE TRIGGER auto_del BEFORE DELETE ON posts
FOR EACH ROW BEGIN
DELETE FROM comments WHERE post = OLD.id;
END;
Помимо этого, если база только создается и не принципиален конкретный тип таблиц, то создавая таблицы типа InnoDB можно задать внешние ключи и указать, как поступать с записями при удалении / обновлении записей родительской таблицы. Такая реализация каскадного удаления изображена ниже:
CREATE TABLE posts(
id INT NOT NULL AUTO_INCREMENT,
title CHAR(40),
content TEXT,
public_date DATE,
PRIMARY KEY (id)
) TYPE = InnoDB;
CREATE TABLE comments(
id INT NOT NULL AUTO_INCREMENT,
post INT,
autor CHAR(20),
text CHAR(100),
PRIMARY KEY (id),
FOREIGN KEY (post) REFERENCES posts (id)
ON UPDATE RESTRICT
ON DELETE CASCADE
) TYPE = InnoDB;
Здесь ключевое слово RESTRICT
устанавливает запрет на редактирование значения ключа, пока есть соответствующие внешние ключи в дочерних таблицах.