Maison >base de données >tutoriel mysql >Comment récupérer les anciennes valeurs de colonnes avant une MISE À JOUR SQL ?
Malgré sa fonctionnalité robuste, la clause RETURNING de SQL est confrontée à une limitation : elle récupère uniquement les valeurs post-mise à jour. Cela peut constituer un obstacle lors de la recherche des valeurs d'origine des colonnes mises à jour, en particulier dans des environnements hautement concurrents.
La solution d'Erwin Brandstetter relève avec élégance ce défi en utilisant une auto-jointure. rejoignez la clause FROM :
UPDATE my_table SET processing_by = our_id_info -- unique to this worker FROM my_table AS old_my_table WHERE trans_nbr IN ( SELECT trans_nbr FROM my_table GROUP BY trans_nbr HAVING COUNT(*) > 1 LIMIT our_limit_to_have_single_process_grab ) AND my_table.row_id = old_my_table.row_id RETURNING my_table.row_id, my_table.processing_by, old_my_table.processing_by AS old_processing_by
En joignant à une autre instance de la table (old_my_table), la requête peut récupérer de manière transparente les valeurs avant la mise à jour.
Dans les scénarios avec des charges d'écriture simultanées importantes, des mesures supplémentaires sont nécessaires pour éviter les conditions de concurrence :
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!