2010-04-30 6 views
7

Avec Remplacer dans, si j'ai deux champs. Prénom nom de famille. La table contient John Smith, si je devais exécuter REPLACE INTO tblNames (Prénom, Nom) VALUES (John, Jones) Est-ce que cela remplacerait Smith par Jones, ou créer un nouveau nom?SQL Remplacer dans la question

Qu'est ce qui détermine si c'est une mise à jour ou un insert?

Répondre

0

Cela dépend de la clé primaire et/ou des contraintes uniques sur la table. S'il n'y a pas de clé primaire ou de contraintes uniques, ce n'est pas différent d'une instruction INSERT de base.

La documentation donne une explication assez claire: http://dev.mysql.com/doc/refman/5.0/en/replace.html

0

Il y a deux opérateurs différents pour insérer et mettre à jour

update tblNames set FirstName="John", LastName="Smith" where FirstName="John" and LastName="Jones" 

cela va renommer John Jones à John Smith

insert into tblNames (FirstName, LastName) values ("John", "Smith") 

cette volonté ajouter une nouvelle entrée (mais peut échouer s'il y a déjà John Smith dans la table et qu'il y a une contrainte unique sur FirstName/LastName)

+0

Lorsque je répondais il n'y avait pas de balise "mysql", donc mes exemples de code sont standard SQL – UserControl

+0

Y at-il un moyen d'éviter l'erreur sur l'insertion si l'enregistrement existe déjà? – Matt

+0

Vous pouvez effectuer une sélection pour vérifier si l'entrée existe déjà avant d'effectuer la mise à jour ou l'insertion. Pas sûr de MySQL mais dans SQL Server vous pouvez même éviter le select. Le scénario typique: mise à jour ... où tblNames mis condition clé si @@ rowcount = 0 - le nombre de lignes affectées par la dernière instruction (à savoir la mise à jour) insert en tblNames .... désolé, pour la réponse tardive, j'espère que cela aidera – UserControl

8
REPLACE 
INTO tblNames (FirstName, LastName) 
VALUES ('John', 'Jones') 

Si une contrainte unique de toute nature sur FirstName, LastName ou leur combinaison, et elle est violée, les dossiers est supprimé et inséré avec les nouvelles valeurs.

Le dossier sera remplacé si l'une des conditions est remplie:

  • FirstName est UNIQUE et il y a une John dans le tableau,
  • LastName est UNIQUE et il y a un Jones dans le tableau,
  • FirstName, Lastname est UNIQUE et il y a un John Jones dans le tableau.

Notez que REPLACE opération est une INSERT peut-être suite à une DELETE qui affectera toujours la table. Dans les versions les plus récentes de MySQL, vous devez utiliser INSERT … ON DUPLICATE KEY UPDATE.

+0

Donc si John Smith est dans la table, et j'envoie John Jones, quelle commande sql j'utilise pour qu'il insère John Jones, mais si j'envoie John Smith, ça ne fait rien. – Matt

+0

@Matt: s'il vous plaît envoyer la sortie de 'SHOW CREATE TABLE tblNames' – Quassnoi

+0

Il n'y a pas encore de tableau ..C'est une planification hypothétique :) – Matt