Я думаю, вы должны создать хранимую процедуру, которая удаляет данные ваших связанных таблиц тогда и только тогда, когда записи выполняют условие.
Там не хватает информации в вашем вопросе, чтобы разработать процедуру, но я могу дать вам небольшой пример:
delimiter $$
create procedure delete_orphans()
begin
declare id_orphan int;
declare done int default false;
declare cur_orphans cursor for
select distinct d.id
from data as d
left join precalculated as p on d.id = p.id
where p.id is null;
declare continue handler for not found set done = true;
open cur_orphans;
loop_delete_orphans: loop
fetch cur_orphans into id_orphan;
if done then
leave cur_orphans;
end if;
delete from data where id = id_orphan;
end loop;
close cur_orphans;
end$$
delimiter ;
Эта процедура удалит все строки в data
таблицы, которая не имеет по крайней мере один родственный строка в таблице precalculated
.
Конечно, этот подход может быть неполным, поскольку он будет удалять строки один за другим, но, как я сказал, это только пример. Вы можете настроить его в соответствии с вашими потребностями.
Вы можете вызвать эту процедуру с триггера, если хотите (с помощью call delete_orphans()
).
Надеюсь, это поможет.
Когда вы говорите, что вы устарели, вы имеете в виду строки, которые не обновляются с использованием этого скрипта? –
Я имею в виду данные, которые были удалены из основных таблиц. Данные, удаленные из основных таблиц, должны быть удалены из предварительно рассчитанной таблицы. так что в принципе, да, данные, которые не были обновлены. – medmed
Создайте триггер на удаляемой таблице, которая проверяет наличие «сиротских» строк и удаляет их – Barranka