UPDATE |
Mise à jour |
---|---|
PostgreSQL |
Syntaxe
[ WITH [ RECURSIVE ] with_query [, ...] ] UPDATE [ ONLY ] table_name [ * ] [ [ AS ] alias ] SET { column_name = { expression | DEFAULT } | ( column_name [, ...] ) = [ ROW ] ( { expression | DEFAULT } [, ...] ) | ( column_name [, ...] ) = ( sub-SELECT ) } [, ...] [ FROM from_item [, ...] ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ] |
Paramètres
Nom | Description |
---|---|
with_query | Ce paramètre permet d'indiquer une ou plusieurs sous-requêtes pouvant être référencées par nom dans la requête UPDATE. |
table_name | Ce paramètre permet d'indiquer le nom (éventuellement qualifié par le schéma) de la table à mettre à jour. Si ONLY est spécifié avant le nom de la table, les lignes correspondantes sont mises à jour uniquement dans la table nommée. Si ONLY n'est pas spécifié, les lignes correspondantes sont également mises à jour dans toutes les tables héritant de la table nommée. Facultativement, * peut être spécifié après le nom de la table pour indiquer explicitement que les tables descendantes sont incluses. |
alias | Ce paramètre permet d'indiquer un nom de substitution pour la table cible. Lorsqu'un alias est fourni, il masque complètement le nom réel de la table. Par exemple, étant donné UPDATE gladir AS f, le reste de l'instruction UPDATE doit faire référence à cette table comme f et non gladir. |
column_name | Ce paramètre permet d'indiquer le nom d'une colonne de la table nommée par table_name. Le nom de la colonne peut être qualifié avec un nom de sous-zone ou un indice de tableau, si nécessaire. N'incluez pas le nom de la table dans la spécification d'une colonne cible - par exemple, UPDATE nom_table SET nom_table.col = 1 n'est pas valide. |
expression | Ce paramètre permet d'indiquer une expression à affecter à la colonne. L'expression peut utiliser les anciennes valeurs de cette colonne et d'autres colonnes de la table. |
DEFAULT | Ce paramètre permet de définir la colonne sur sa valeur par défaut (étant NULL si aucune expression par défaut spécifique ne lui a été affectée). |
sub-SELECT | Ce paramètre permet d'indiquer une sous-requête SELECT produisant autant de colonnes de sortie que celles répertoriées dans la liste de colonnes entre parenthèses la précédant. La sous-requête ne doit pas produire plus d'une ligne lors de son exécution. S'il produit une ligne, ses valeurs de colonne sont affectées aux colonnes cibles ; s'il ne génère aucune ligne, des valeurs NULL sont affectées aux colonnes cibles. La sous-requête peut faire référence à d'anciennes valeurs de la ligne actuelle de la table en cours de mise à jour. |
from_item | Ce paramètre permet d'indiquer une expression de table permettant aux colonnes d'autres tables d'apparaître dans la condition WHERE et les expressions de mise à jour. Cela utilise la même syntaxe que la clause FROM d'une instruction SELECT ; par exemple, un alias pour le nom de la table peut être spécifié. Ne répétez pas la table cible en tant que from_item sauf si vous envisagez une auto-jointure (auquel cas elle doit apparaître avec un alias dans from_item). |
condition | Ce paramètre permet d'indiquer une expression renvoyant une valeur de type booléen. Seules les lignes pour lesquelles cette expression renvoie true seront mises à jour. |
cursor_name | Ce paramètre permet d'indiquer un nom du curseur à utiliser dans une condition WHERE CURRENT OF. La ligne à mettre à jour est la dernière extraite de ce curseur. Le curseur doit être une requête de non regroupement sur la table cible du UPDATE. Notez que WHERE CURRENT OF ne peut pas être spécifié avec une condition booléenne. |
output_expression | Ce paramètre permet d'indiquer une expression à calculer et à renvoyer par la commande UPDATE après la mise à jour de chaque ligne. L'expression peut utiliser n'importe quel nom de colonne de la table nommée par table_name ou les tables répertoriées dans FROM. Écrivez * pour retourner toutes les colonnes. |
output_name | Ce paramètre permet d'indiquer un nom à utiliser pour une colonne renvoyée. |
Description
Cette instruction permet de mettre à jour les lignes d'un tableau.
Remarques
- L'instruction UPDATE modifie les valeurs des colonnes spécifiées dans toutes les lignes satisfaisant à la condition. Seules les colonnes à modifier doivent être mentionnées dans la clause SET ; les colonnes non explicitement modifiées conservent leurs valeurs précédentes.
- Il existe deux manières de modifier une table à l'aide des informations contenues dans d'autres tables de la base de données : en utilisant des sous-sélections ou en spécifiant des tables supplémentaires dans la clause FROM. La technique la plus appropriée dépend des circonstances spécifiques.
- La clause facultative RETURNING oblige UPDATE à calculer et à renvoyer des valeurs en fonction de chaque ligne réellement mise à jour. Toute expression utilisant les colonnes de la table, et/ou les colonnes d'autres tables mentionnées dans FROM, peut être calculée. Les nouvelles valeurs (post-mise à jour) des colonnes de la table sont utilisées. La syntaxe de la liste RETURNING est identique à celle de la liste de sortie de SELECT.
- Vous devez disposer du privilège UPDATE sur la table, ou au moins sur la ou les colonnes répertoriées à mettre à jour. Vous devez également disposer du privilège SELECT sur toute colonne dont les valeurs sont lues dans les expressions ou la condition.
- En cas de réussite, une commande UPDATE renvoie une balise de commande dans le format :
UPDATE count Le nombre correspond au nombre de lignes mises à jour, y compris les lignes correspondantes dont les valeurs n'ont pas changé. Notez que le nombre peut être inférieur au nombre de lignes correspondant à la condition lorsque les mises à jour ont été supprimées par un déclencheur BEFORE UPDATE. Si count est égal à 0, aucune ligne n'a été mise à jour par la requête (ceci n'est pas considéré comme une erreur).
- Si la commande UPDATE contient une clause RETURNING, le résultat sera similaire à celui d'une instruction SELECT contenant les colonnes et valeurs définies dans la liste RETURNING, calculée sur la ou les lignes mises à jour par la commande.
- Lorsqu'une clause FROM est présente, ce qui se passe essentiellement, c'est que la table cible est jointe aux tables mentionnées dans la liste from_item, et chaque ligne de sortie de la jointure représente une opération de mise à jour pour la table cible. Lorsque vous utilisez FROM, vous devez vous assurer que la jointure produit au plus une ligne de sortie pour chaque ligne à modifier. En d'autres termes, une ligne cible ne doit pas être jointe à plus d'une ligne des autres tables. Si tel est le cas, une seule des lignes de jointure sera utilisée pour mettre à jour la ligne cible, mais celle qui sera utilisée n'est pas facilement prévisible.
- En raison de cette indétermination, le référencement d'autres tables uniquement dans des sous-sélections est plus sûr, bien que souvent plus difficile à lire et plus lent que d'utiliser une jointure.
- Dans le cas d'une table partitionnée, la mise à jour d'une ligne peut l'amener à ne plus satisfaire la contrainte de partition. Puisqu'il n'y a aucune disposition pour déplacer la ligne vers la partition appropriée à la nouvelle valeur de sa clé de partitionnement, une erreur se produira dans ce cas. Cela peut également se produire lors de la mise à jour directe d'une partition.
Dernière mise à jour : Jeudi, le 14 Octobre 2021