Я пытаюсь принять простое решение, удалив записи из базы данных.
У меня есть главная таблица с записями и уникальным идентификатором, это автоматическое увеличение.
Затем у меня есть вторая таблица, в которой хранятся значения (может быть больше одного), связывающие идентификатор из первой таблицы.
Пример:
table1
editors
ID (autoincrement)
EditorName
Тогда у меня есть вторая таблица с:
table2
ID
editorID (same ID as table1)
bookname
Таким образом, я хочу узнать, как лучше всего удалить запись из таблицы1 (пример ID = 2), и она автоматически удаляет все записи из таблицы2, где editorID = 2.
Я пробовал много способов, но, кажется, они не работают, если я не сделаю два запроса, но мне это не нравится. Есть более умный способ сделать это? Это должно быть по коду, или я мог бы связать две таблицы в SQL, и они связаны по ID и editorID?
Решение № 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;
сделать внешний ключ для связи этих 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;
Проверь это.
DELETE table1
FROM table1
INNER JOIN table2 ON table1.ID = table2.editorID
WHERE table1.ID = 2;