Invoegen in een MySQL-tabel of bijwerken indien aanwezig

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 idis, 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 IGNOREgebruik, 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 idde 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 INSERTof SELECTop te sommen, hoewel ik het ermee eens ben dat het waarschijnlijk beter is.


Antwoord 9

In het geval dat u non-primaryvelden als criterium/voorwaarde voor ON DUPLICATEwilt maken, kunt u een UNIQUE INDEXmaken toets op die tabel om de DUPLICATEte 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 nameen agein 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 DUPLICATEmoeten 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 id1 al bestaat en de leeftijd er al is, daarna als u de eerste query maakt zonder agedan is de waarde van agegeen

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;

LEAVE A REPLY

Please enter your comment!
Please enter your name here

fourteen − 11 =

Other episodes