La description des spécifications CQL3 de l'instruction UPDATE commence par le paragraphe suivant:Des lignes spécifiques d'une partition doivent-elles être spécifiées pour mettre à jour et/ou supprimer des colonnes statiques?
L'instruction UPDATE écrit une ou plusieurs colonnes pour une ligne donnée dans un tableau . La clause (where) est utilisée pour sélectionner la ligne à mettre à jour et doit inclure toutes les colonnes composant la PRIMARY KEY (la relation IN est uniquement prise en charge par pour la dernière colonne de la clé de partition). Les autres colonnes sont spécifiées après le mot clé SET.
La description dans la spécification de l'instruction DELETE commence par un paragraphe similaire:
L'instruction DELETE supprime les colonnes et les lignes. Si les noms de colonne sont fournis directement après le mot-clé DELETE, seules ces colonnes sont supprimées de la ligne indiquée par la clause (where-clause) (la syntaxe id [value] dans (selection) est pour la collection , veuillez vous reporter à la collection section pour plus de détails). Sinon, les lignes entières sont supprimées. La clause (where) permet de spécifier la clé pour la ou les lignes à supprimer (la relation IN n'est prise en charge que pour la dernière colonne de la clé de partition).
Les portions en gras de chacun de ces descriptions état, en termes simples, que ces états peuvent être utilisés pour modifier les données d'une manière basée sur les lignes uniquement. Cependant, étant donné la nature de la relation (ou son absence) entre les lignes et les colonnes statiques (qui existent indépendamment d'une ligne particulière) d'une table, il semble qu'il devrait y avoir un moyen de modifier ces colonnes étant donné seulement les clés des partitions dans lesquelles ils sont respectivement contenus. Selon la spécification cependant, cela ne semble pas possible, et je ne suis pas sûr que ce soit un produit de la difficulté d'autoriser cela dans la syntaxe CQL3, ou autre chose. Si une colonne statique ne peut pas être mise à jour ou supprimée indépendamment de n'importe quelle ligne de sa table, alors ces opérations sont couplées à leurs homologues à colonnes non statiques, rendant l'ensemble des colonnes ciblées par de telles opérations, difficile à déterminer . Par exemple, étant donné une table peuplée avec la définition suivante:
CREATE TABLE IF NOT EXISTS example_table
(
partitionKeyColumn int
clusteringColumn int
nonPrimaryKeyColumn int
staticColumn varchar static
PRIMARY KEY (partitionKeyColumn, clusteringColumn)
)
... il est pas évident si les déclarations SUPPRIMER suivantes sont équivalentes:
//#1 (Explicitly specifies all of the columns in and "in" the target row)
DELETE partitionKeyColumn, clusteringColumn, nonPrimaryKeyColumn, staticColumn FROM example_table WHERE partitionKeyColumn = 1 AND clusteringColumn = 2
//#2 (Implicitly specifies all of the columns in (but not "in"?) the target row)
DELETE FROM example_table WHERE partitionKeyColumn = 1 AND clusteringColumn = 2
Alors, phrasé mes observations sous forme de question :
- Les instructions DELETE ci-dessus sont-elles équivalentes?
- La clé primaire d'au moins une ligne d'une table CQL3 doit-elle être fournie pour mettre à jour ou supprimer une colonne statique dans cette table? Si oui, pourquoi?