Récupération des valeurs de colonnes avant mise à jour uniquement à l'aide de SQL
Récupération des valeurs d'origine des colonnes d'une ligne après une mise à jour sans utiliser de déclencheurs, stockées des procédures ou d'autres entités externes constituent un défi récurrent dans SQL. Pour résoudre ce problème, nous explorons différentes approches.
Tentatives initiales et inconvénients
Comme indiqué dans la question d'origine, utiliser FOR UPDATE avec une sous-requête contenir une clause GROUP BY n'est pas réalisable. Les jointures deviennent par conséquent irréalisables.
Solution utilisant un alias de table
La solution la plus simple consiste à joindre la table à elle-même à l'aide d'un alias de table. En alias la table, nous pouvons accéder à la fois aux valeurs originales et mises à jour. Considérez la requête de mise à jour suivante :
UPDATE my_table x SET processing_by = our_id_info FROM my_table y WHERE x.trans_nbr = y.trans_nbr AND x.row_id = y.row_id RETURNING y.processing_by AS old_processing_by, x.processing_by;
Gestion des opérations d'écriture simultanées
Pour éviter que les opérations d'écriture simultanées n'affectent le résultat, nous pouvons utiliser FOR UPDATE clause dans une sous-requête. Cela garantit que seule la ligne verrouillée par la sous-requête est traitée.
UPDATE tbl x SET tbl_id = 24, name = 'New Gal' FROM (SELECT tbl_id, name FROM tbl WHERE tbl_id = 4 FOR UPDATE) y WHERE x.tbl_id = y.tbl_id RETURNING y.tbl_id AS old_id, y.name AS old_name, x.tbl_id, x.name;
Autres considérations
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!