J'ai une base de données qui était à l'origine dans MyISAM et n'avait donc pas de contraintes de clé étrangère. Par conséquent, il existe un certain nombre de lignes orphelines où l'enregistrement auquel la clé étrangère fait référence a été supprimé depuis. Pour corriger cela, j'ai décidé de convertir en InnoDB et d'ajouter les clés étrangères, avec CASCADE pour la mise à jour et la suppression. Cependant, lorsque je tente d'ajouter la clé étrangère, je reçois des erreurs comme ça (de la console Navicat 8):MySQL InnoDB - crée une contrainte de clé étrangère CASCADE lorsque des données existent déjà qui la violent?
1452 - Cannot add or update a child row: a foreign key constraint fails
(`database`.`#sql-1358_38d`, CONSTRAINT `#sql-1358_38d_ibfk_1` FOREIGN KEY
(`manufacturerID`) REFERENCES `manufacturer` (`ID`) ON DE)
Je sais pourquoi il fait cela - parce que des lignes orphelines. Existe-t-il un moyen pour que la création de la contrainte efface automatiquement ces lignes? Il faudra des années pour parcourir toutes les tables et trouver des rangs orphelins.
Ceci est l'une des requêtes que je suis en juste au cas où il est suspect:
ALTER TABLE part_number ADD CONSTRAINT
FOREIGN KEY(manufacturerID)
REFERENCES manufacturer(ID)
ON DELETE CASCADE
ON UPDATE CASCADE;
Eh bien, c'est essentiellement ce que j'ai commencé à faire, mais ça va prendre un certain temps, me demandais s'il y avait la possibilité de ne pas avoir à le faire manuellement. – Gnuffo1