2016-09-29 2 views
1

У меня есть две таблицы с данными. Я хочу удалить строки в обеих таблицах. Но у меня есть внешние ключи между ними. Как я могу это сделать?Mysql: удалять строки в двух таблицах с внешними ключами

departure 
    id departure_date 
     1  2016-09-29 
     2  2016-09-30 

departure_time 
    id departure_id (fk) 
     1   1 
     2   2 

лучше всего было бы иметь запрос, который получает все строки будут удалены, и удаляет строки в обеих таблицах одновременно. Есть ли способ сделать это без удаления ограничений/FK?

В этом примере, скажем, я хотел бы, чтобы удалить все отклонения от даты 2016-09-30

(удаление отъезда: идентификатор 2 и DEPARTURE_TIME: ID: 2)

ответ

3

Пожалуйста, попробуйте это, надеюсь, что это поможет.

DELETE FROM departure, departure_time 
USING departure 
INNER JOIN departure_time 
WHERE departure_date = '2016-09-30' 
     AND departure_time.id = departure.id 

Или

DELETE FROM departure, departure_time 
USING departure 
INNER JOIN departure_time 
WHERE departure_date = '2016-09-30' 
     AND departure_time.departure_id = departure.id 

Или вы можете использовать ON DELETE CASCADE, что будет делать работу за вас автоматически.

+0

Hi Mumesh, я ошибаюсь или два написанных вами запроса идентичны? Благодарим вас за подтверждение o выделите разницу. – Robert

+0

Он использует два разных столбца 'id' и' departure_id', хотя только 'departure_id' будет правильным. – Manatax

4

В MySQL, можно также удалить из нескольких таблиц в одном операторе:

delete d, dt 
    from departure d join 
     departure_time dt 
     on d.id = dt.departure_id 
    where departure_date = '2016-09-30'; 

Другим решением является объявление внешнего ключа как on delete cascade. Затем, когда вы удаляете строку в исходной таблице, база данных удалит связанные записи во второй таблице.

+0

Благодарим вас за ответ. Но это не сработало. Пришлось изменить dt.id на dt.departure_id Затем он получил ошибку Не удалось удалить или обновить родительскую строку: ограничение внешнего ключа завершается с ошибкой ('osl'.'departure_time', CONSTRAINT' departure_time_departure_fk' FOREIGN KEY ('departure_id') ССЫЛКИ 'отъезд' (' id')) – TorK

+0

Но он работал при добавлении удаления каскада :) – TorK

+0

@Tork. , , Ой, я неправильно читаю отношения столбцов. –

Смежные вопросы