web-dev-qa-db-fra.com

SQLite "INSERT OR REMPLACER DANS" vs. "UPDATE ... WHERE"

Je n'ai jamais vu la syntaxe INSERT OR REPLACE INTO names (id, name) VALUES (1, "John") utilisée dans SQL auparavant, et je me demandais pourquoi c'est mieux que UPDATE names SET name = "John" WHERE id = 1. Y at-il une bonne raison d’utiliser l’un sur l’autre? Cette syntaxe est-elle spécifique à SQLite?

58
nevan king

UPDATE ne fera rien si la ligne n'existe pas.

Où comme INSERT OR REPLACE serait inséré si la ligne n’existait pas, ou remplaçait les valeurs s’il en existait une.

86
Adriaan Stander

Je travaille actuellement sur une telle déclaration et j'ai découvert un autre fait à noter: INSERT OR REPLACE remplacera toutes les valeurs non fournies dans la déclaration. Par exemple, si votre table contient une colonne "nom de famille" pour lequel vous n'avez pas fourni de valeur, INSERT OR REPLACE annulera le "nom de famille" si possible (si les contraintes le permettent) ou échouera.

31
cybergen
REPLACE INTO table(column_list) VALUES(value_list);

est une forme plus courte de

INSERT OR REPLACE INTO table(column_list) VALUES(value_list);

Pour que REPLACE s'exécute correctement, votre structure de table doit comporter des lignes uniques, qu'il s'agisse d'une clé primaire simple ou d'un index unique.

REPLACE supprime, puis INSERT l'enregistrement et provoque l'exécution d'un déclencheur INSERT si vous les avez configurés. Si vous avez un déclencheur sur INSERT, vous pouvez rencontrer des problèmes.


Ceci est un travail autour .. pas vérifié la vitesse ..

INSERT OR IGNORE INTO table (column_list) VALUES(value_list);

suivi par

UPDATE table SET field=value,field2=value WHERE uniqueid='uniquevalue'

Cette méthode permet un remplacement sans provoquer de déclenchement.

8
PodTech.io

La requête d'insertion ou de remplacement insérerait un nouvel enregistrement si id = 1 n'existe pas déjà.

La requête de mise à jour n'indiquerait que id = 1 si elle existait déjà, elle ne créerait pas de nouvel enregistrement si elle n'existait pas.

4
Anonym