Ich führe in der nächsten Version meiner Anwendung die Datenbankintegrität mithilfe von innodb-Einschränkungen ein. Alles läuft gut, aber einige meiner Tabellen haben Datensätze mit gelöschten Referenzen (tote Datensätze) und deshalb kann ich der Tabelle keine Constraints hinzufügen.
Ich versuche es:
ALTER TABLE `article` ADD FOREIGN KEY (`author_id`) REFERENCES `authors` (`id`) ON DELETE CASCADE;
Und ich verstehe:
#1452 - Cannot add or update a child row: a foreign key constraint fails (`books`.<result 2 when explaining filename '#sql-442_dc'>, CONSTRAINT `#sql-442_dc_ibfk_1` FOREIGN KEY (`author_id`) REFERENCES `authors` (`id`) ON DELETE CASCADE)
Bei dieser Abfrage habe ich festgestellt, dass über 500 Datensätze keine Referenzen haben (die Autoren wurden gelöscht, aber ihre Artikel blieben erhalten):
SELECT `articles`.`id`
FROM `articles` LEFT JOIN `authors` ON `articles`.`author_id` = `authors`.`id`
WHERE ISNULL(`authors`.`id`);
Bevor ich also eine Einschränkung hinzufügen kann, muss ich mich mit diesen befassen. Wie kann ich alle Datensätze löschen, die ich mit der obigen Abfrage erhalte?
Ich habe es versucht:
DELETE FROM `articles` WHERE `id` IN (
SELECT `articles`.`id`
FROM `articles` LEFT JOIN `authors` ON `articles`.`author_id` = `authors`.`id`
WHERE ISNULL(`authors`.`id`);
)
Aber mysql antwortet:
You can't specify target table 'articles' for update in FROM clause
Für jede Hilfe wäre ich sehr dankbar.