Положим, есть 2 таблицы, связанные посредством foreign key:
CREATE TABLE `post` (
`id` int(11) NOT NULL AUTO_INCREMENT,
...
PRIMARY KEY (`id`)
);
CREATE TABLE `post_comment` (
`post_id` int(11) NOT NULL,
...
FOREIGN KEY (`post_id`) REFERENCES `post`(`id`) ON DELETE CASCADE
);
Если выполнить
DELETE FROM `post` WHERE `id` = 1
То строки из post и post_comment на внутреннем уровне удаляются внутри ОБЩЕЙ транзакции или отдельной для удаления из post и отдельной для post_comment?
Другими словами, простое удаление из post (как в коде выше) на внутреннем уровне является аналогом вот этого (вариант 1):
START TRANSACTION
SELECT * FROM `post` WHERE `id` = 1 FOR UPDATE
DELETE FROM `post_comment` WHERE `post_id` = 1
DELETE FROM `post` WHERE `id` = 1
COMMIT
Или же аналогом этого (вариант 2):
START TRANSACTION
DELETE FROM `post_comment` WHERE `post_id` = 1
COMMIT
START TRANSACTION
DELETE FROM `post` WHERE `id` = 1
COMMIT
P.S. Также интересен вопрос отличий Postgres от InnoDB в этом плане. Поэтому, буду благодарен если в ответе укажите DBMS для которой он справедлив.