В случае каскадных обновлений вы просто не сможете сделать это в пространстве приложения, если у вас есть ограничения внешнего ключа в базе данных.
Пример: скажем, у вас есть таблица поиска для штатов США с первичным ключом двухбуквенной аббревиатуры. Тогда у вас есть таблица для почтовых адресов, которые ссылаются на нее. Кто-то говорит вам, что вы по ошибке дали Монтане аббревиатуру «MO» вместо «MT», поэтому вам нужно изменить ее в таблице поиска.
CREATE TABLE States (st CHAR(2) PRIMARY KEY, state VARCHAR(20) NOT NULL);
INSERT INTO States VALUES ('MO', 'Montana');
CREATE TABLE Addresses (addr VARCHAR(20), city VARCHAR(20), st CHAR(2), zip CHAR(6),
FOREIGN KEY (st) REFERENCES States(st));
INSERT INTO Addresses VALUES ('1301 East Sixth Ave.', 'Helena', 'MO', '59620');
Теперь вы идете исправить ошибку, без помощи каскадных обновлений на стороне базы данных. Ниже приведен тест с использованием MySQL 5.0 (предположим, что не существует записей для Миссури, которая фактически использует аббревиатуру «MO»).
UPDATE States SET st = 'MT' WHERE st = 'MO';
ERROR 1451 (23000): Cannot delete or update a parent row:
a foreign key constraint fails (`test/addresses`,
CONSTRAINT `addresses_ibfk_1` FOREIGN KEY (`st`) REFERENCES `states` (`st`))
UPDATE Addresses SET st = 'MT' WHERE st = 'MO';
ERROR 1452 (23000): Cannot add or update a child row:
a foreign key constraint fails (`test/addresses`,
CONSTRAINT `addresses_ibfk_1` FOREIGN KEY (`st`) REFERENCES `states` (`st`))
UPDATE Addresses JOIN States USING (st)
SET Addresses.st = 'MT', States.st = 'MT'
WHERE States.st = 'MO';
ERROR 1451 (23000): Cannot delete or update a parent row:
a foreign key constraint fails (`test/addresses`,
CONSTRAINT `addresses_ibfk_1` FOREIGN KEY (`st`) REFERENCES `states` (`st`))
Никакой запрос на стороне приложения не может решить эту ситуацию. Вам необходимо каскадные обновления в базе данных, чтобы выполнить обновление в обеих таблицах атомарно, прежде чем будет применено ограничение ссылочной целостности.