Suppression sécurisée des enregistrements multi-tables MySQL
L'utilisation directe du code suivant pour supprimer des lignes de plusieurs tables simultanément peut entraîner une erreur :
DELETE FROM `pets` p, `pets_activities` pa WHERE p.`order` > :order AND p.`pet_id` = :pet_id AND pa.`id` = p.`pet_id`
La solution recommandée est d'utiliser l'instruction JOIN :
DELETE p, pa FROM pets p JOIN pets_activities pa ON pa.id = p.pet_id WHERE p.order > :order AND p.pet_id = :pet_id
Alternativement, vous pouvez simplement supprimer les enregistrements de la table pets_activities
tout en référençant la table pets
:
DELETE pa FROM pets_activities pa JOIN pets p ON pa.id = p.pet_id WHERE p.order > :order AND p.pet_id = :pet_id
Cette approche utilise un alias dans la clause FROM
pour spécifier la table à supprimer, et est particulièrement utile lorsqu'il s'agit de scénarios complexes avec intégrité référentielle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!