Originalmente inviato da
wider
In pratica REPLACE prende come WHERE la chiave primaria?
Non esattamente... considera la REPLACE come una "scorciatoia" per queste tre query (in realtà sono due quelle eseguite):
Codice:
--- prima query
SELECT * FROM NomeTabella WHERE Id = TestingId
--- se la query non ha risultati, puoi inserire il record con il nuovo Id
INSERT INTO NomeTabella (Id, AltriCampi) VALUES (TestingId, AltriValori)
--- se la query ha risultati, esegui l'aggiornamento
UPDATE NomeTabella SET AltriCampi = AltriValori WHERE Id = TestingId
Queste due/tre query le puoi fare in un sol colpo con una REPLACE:
Codice:
REPLACE INTO NomeTabella (Id, AltriCampi) VALUES (TestingId, AltriValori)
Inoltre, dato che la sintassi di REPLACE è la stessa di INSERT, puoi fare questo test più volte con una sola query:
Codice:
REPLACE INTO NomeTabella (Id, AltriCampi) VALUES
(TestingId1, AltriValori1),
(TestingId2, AltriValori2),
...
(TestingIdN, AltriValoriN)
In questo caso, il test sopra viene fatto per ogni TestingId specificato: se risulta già presente, i valori di AltriCampi saranno reimpostati su AltriValori. In caso contrario, il record viene inserito con TestingId e AltriValori specificati, e gli altri campi specificati sui valori di default (o NULL se non è definito un default).
Spero di averti risposto... stammi bene...