Удалить из таблицы 1 и записи, связанные в таблице 2

Я пытаюсь принять простое решение, удалив записи из базы данных.
У меня есть главная таблица с записями и уникальным идентификатором, это автоматическое увеличение.

Затем у меня есть вторая таблица, в которой хранятся значения (может быть больше одного), связывающие идентификатор из первой таблицы.

Пример:

table1
editors
ID (autoincrement)
EditorName

Тогда у меня есть вторая таблица с:

table2
ID
editorID (same ID as table1)
bookname

Таким образом, я хочу узнать, как лучше всего удалить запись из таблицы1 (пример ID = 2), и она автоматически удаляет все записи из таблицы2, где editorID = 2.

Я пробовал много способов, но, кажется, они не работают, если я не сделаю два запроса, но мне это не нравится. Есть более умный способ сделать это? Это должно быть по коду, или я мог бы связать две таблицы в SQL, и они связаны по ID и editorID?

1

Решение

Решение № 1:

Если у вас есть ограничение внешнего ключа в table2 что относится к ID из table1 имеющий ON DELETE CASCADE Поведение затем удаление записей из table1 удалит соответствующие записи из table2,

Решение № 2:

Вы можете удалить несколько таблиц, используя JOIN

DELETE T1,T2
FROM table1 AS T1
INNER JOIN table2 AS T2 ON T1.ID = T2.editorID
WHERE T1.ID = 2;

Увидеть Связанный пост


РЕДАКТИРОВАТЬ:

Для того, чтобы удалить записи из table1 а также table2 независимо от того, существуют ли соответствующие записи в table2 или нет, вам нужно заменить INNER JOIN от LEFT JOIN

  DELETE T1,T2
FROM table1 AS T1
LEFT JOIN table2 AS T2 ON T1.ID = T2.editorID
WHERE T1.ID = 2;
1

Другие решения

сделать внешний ключ для связи этих 2 таблиц

Определите внешний ключ между этими двумя таблицами и дайте MySQL знать, когда каскадироваться при удалении редактора:

CREATE TABLE editors (
ID int(11) NOT NULL AUTO_INCREMENT,
EditorName varchar(255) NOT NULL,
PRIMARY KEY (ID)
)engine=InnoDB;

CREATE TABLE edits (
ID int(11) NOT NULL AUTO_INCREMENT,
bookname varchar(255) NOT NULL,
editorID int(11) NOT NULL,
PRIMARY KEY (ID),
KEY editorID (editorID),
CONSTRAINT edits_ibfk_1
FOREIGN KEY (editorID)
REFERENCES editors (ID)
ON DELETE CASCADE
)engine=InnoDB;
0

Проверь это.

DELETE table1
FROM table1
INNER JOIN table2 ON table1.ID = table2.editorID
WHERE table1.ID = 2;
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector