В этом уроке я расскажу Вам, как автоматизировать каскадное удаление MYSQL записей из базы данных. Для примера рассмотрим базу с двумя таблицами (запись, комментарии). Запросы для создания таблиц можете увидеть ниже.
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 устанавливает запрет на редактирование значения ключа, пока есть соответствующие внешние ключи в дочерних таблицах.
На этом урок по реализации каскадного удаления окончен. Благодарю за внимание! Также существует интересная тема про удаление старых записей на PHP и MySQL, посмотрите! Может кому то, потребуется. Удачи!