Ik wil een rij toevoegen aan een databasetabel, maar als er een rij bestaat met dezelfde unieke sleutel, wil ik de rij bijwerken.
Bijvoorbeeld:
INSERT INTO table_name (ID, NAME, AGE) VALUES(1, "A", 19);
Stel dat de unieke sleutel id
is, en in mijn Databasestaat een rij met ID = 1
. In dat geval wil ik die rij bijwerken met deze waarden. Normaal gesproken geeft dit een foutmelding.
Als ik INSERT IGNORE
gebruik, negeert het de fout, maar wordt het nog steeds niet bijgewerkt.
Antwoord 1, autoriteit 100%
Gebruik INSERT ... ON DUPLICATE KEY UPDATE
QUERY:
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name="A", age=19
Antwoord 2, autoriteit 15%
Bekijk VERVANGEN
http://dev.mysql.com/doc/refman/ 5.0/en/replace.html
REPLACE into table (id, name, age) values(1, "A", 19)
Antwoord 3, autoriteit 3%
Gebruik de volgende syntaxis als u batch-invoeging gebruikt:
INSERT INTO TABLE (id, name, age) VALUES (1, "A", 19), (2, "B", 17), (3, "C", 22)
ON DUPLICATE KEY UPDATE
name = VALUES (name),
...
Antwoord 4, autoriteit 2%
Elk van deze oplossingen zal werken met betrekking tot uw vraag:
INSERT IGNORE INTO table (id, name, age) VALUES (1, "A", 19);
of
INSERT INTO TABLE (id, name, age) VALUES(1, "A", 19)
ON DUPLICATE KEY UPDATE NAME = "A", AGE = 19;
of
REPLACE INTO table (id, name, age) VALUES(1, "A", 19);
Als je meer wilt weten over deze verklaring bezoek deze link
Antwoord 5
Probeer dit eens:
INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1;
Hopelijk helpt dit.
Antwoord 6
Probeer dit:
INSERT INTO table (id,name,age) VALUES('1','Mohammad','21') ON DUPLICATE KEY UPDATE name='Mohammad',age='21'
Opmerking:
Hier, als id de primaire sleutel is, worden na de eerste invoeging met id='1'
elke keer dat wordt geprobeerd om id='1'
in te voeren, de naam en leeftijd en de vorige naam bijgewerkt zal veranderen.
Antwoord 7
Bij gebruik van SQLite:
REPLACE into table (id, name, age) values(1, "A", 19)
Op voorwaarde dat id
de primaire sleutel is. Of anders voegt het gewoon een andere rij in. Zie INSERT(SQLite).
Antwoord 8
Alleen omdat ik hier op zoek was naar deze oplossing, maar om te updaten vanuit een andere identiek gestructureerde tabel (in mijn geval test de website DB naar live DB):
INSERT live-db.table1
SELECT *
FROM test-db.table1 t
ON DUPLICATE KEY UPDATE
ColToUpdate1 = t.ColToUpdate1,
ColToUpdate2 = t.ColToUpdate2,
...
Zoals elders vermeld, hoeven alleen de kolommen die u wilt bijwerken te worden opgenomen na ON DUPLICATE KEY UPDATE
.
Het is niet nodig om de kolommen in de INSERT
of SELECT
op te sommen, hoewel ik het ermee eens ben dat het waarschijnlijk beter is.
Antwoord 9
In het geval dat u non-primary
velden als criterium/voorwaarde voor ON DUPLICATE
wilt maken, kunt u een UNIQUE INDEX
maken toets op die tabel om de DUPLICATE
te activeren.
ALTER TABLE `table` ADD UNIQUE `unique_index`(`name`);
En als u twee velden wilt combineren om het uniek te maken op de tafel, kunt u dit bereiken door meer toe te voegen aan de laatste parameter.
ALTER TABLE `table` ADD UNIQUE `unique_index`(`name`, `age`);
Opmerking, zorg ervoor dat u eerst alle gegevens verwijdert met dezelfde waarde voor name
en age
in de andere rijen.
DELETE table FROM table AS a, table AS b WHERE a.id < b.id
AND a.name <=> b.name AND a.age <=> b.age;
Daarna zou het de gebeurtenis ON DUPLICATE
moeten activeren.
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name = VALUES(name), age = VALUES(age)
Antwoord 10
In mijn geval heb ik onderstaande query’s gemaakt, maar in de eerste query als id
1 al bestaat en de leeftijd er al is, daarna als u de eerste query maakt zonder age
dan is de waarde van age
geen
REPLACE into table SET `id` = 1, `name` = 'A', `age` = 19
maak een zoekopdracht zoals hieronder om het bovenstaande probleem te vermijden
INSERT INTO table SET `id` = '1', `name` = 'A', `age` = 19 ON DUPLICATE KEY UPDATE `id` = "1", `name` = "A",`age` = 19
kan het je helpen …
Antwoord 11
In het geval dat u het oude veld wilt behouden (bijvoorbeeld: naam). De vraag zal zijn:
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name=name, age=19;