Le préfixe
ALTER TABLE distingue cette syntaxe de celle de la plupart des autres systèmes prenant en charge SQL. Il indique que, contrairement à des requêtes similaires dans les bases de données OLTP, il s’agit d’une opération lourde qui n’est pas conçue pour être utilisée fréquemment.filter_expr doit être de type UInt8. Cette requête met à jour les valeurs des colonnes spécifiées avec celles des expressions correspondantes dans les lignes pour lesquelles filter_expr prend une valeur non nulle. Les valeurs sont converties vers le type de la colonne à l’aide de l’opérateur CAST. La mise à jour de colonnes utilisées dans le calcul de la clé primaire ou de la clé de partitionnement n’est pas prise en charge.
Une requête peut contenir plusieurs commandes séparées par des virgules.
Le mode de synchronisation du traitement de la requête est défini par le paramètre mutations_sync. Par défaut, il est asynchrone.
Voir aussi
- Mutations
- Synchronisation des requêtes ALTER
- Paramètre mutations_sync
- Lightweight
UPDATE- Alternative légère de mise à jour utilisant des patch parts APPLY PATCHES- Appliquer manuellement les patches issus des lightweight updates
Colonnes matérialisées
MATERIALIZED dont l’expression lit une
colonne mise à jour est recalculée lors de la mutation, afin que sa valeur stockée reste cohérente avec les nouvelles données.
Colonnes calculées à partir de colonnes EPHEMERAL
EPHEMERAL n’existe que pendant la durée d’un
INSERT et n’est jamais stockée. Une colonne MATERIALIZED calculée à partir de celle-ci ne peut donc pas être recalculée par une
mutation. Elle conserve la valeur calculée lors de l’INSERT, qui ne correspond alors plus à son
expression :
m vaut 8, la valeur calculée lors de l’INSERT, et non 2 + 7 : la valeur de e n’est pas disponible
en dehors de l’INSERT qui l’a fournie. La mutation consigne un avertissement dans le journal du serveur lorsqu’elle ignore une
colonne pour cette raison. Pour mettre à jour une telle colonne, réexécutez l’INSERT pour les lignes concernées.