скажем, tableA - это родительская таблица, tableB - это дочерняя таблица.И на родительской таблице A я буду использовать «ON UPDATE CASCADE ON DELETE CASCADE», чтобы MySQL автоматически применял действия обновления / удаления к дочерней таблице B.
Если таблица A имеет ON UPDATE CASCADE ON DELETE CASCADE
тогда tableA - это «потомок», а не «родитель».(SQL не использует термины «родитель» и «ребенок»; tableA - это таблица , на которую ссылается , а tableB - это таблица , на которую ссылается .)автоматически применяется к совпадающим значениям в таблице A.
create table tableB (
column_a char(2) primary key
);
create table tableA (
column_a char(2) not null
references tableB (column_a)
on update cascade
on delete cascade,
column_b char(2) not null,
primary key (column_a, column_b)
);
insert into tableB values ('aa');
insert into tableA values ('aa', 'bb');
update tableB
set column_a = 'cc'
where column_a = 'aa';
select *
from tableA;
column_a column_b
--
cc bb
Обновление, каскадное из-за ссылок на внешние ключи, представляет собой одну транзакцию.SQL должен работать таким образом.Если бы обновление было двумя транзакциями - одна для ссылочной таблицы и одна для ссылочной таблицы - и обновление ссылочной таблицы завершилось неудачно, база данных была бы в несогласованном состоянии.(Например, в приведенном выше обновлении, поскольку «aa» изменилось бы на «cc» в таблице B, но не в таблице A. DBMS не может этого допустить.)