sql >> Database >  >> RDS >> Mysql

Kan ik ON DUPLICATE KEY UPDATE gebruiken met een INSERT-query met behulp van de SET-optie?

Ik heb ON DUPLICATE KEY UPDATE . gebruikt heel veel. Voor sommige situaties is het de niet-standaard SQL-extensie die echt de moeite waard is om te gebruiken.

Ten eerste moet je ervoor zorgen dat je een unieke sleutelbeperking hebt. De ON DUPLICATE KEY UPDATE functie treedt alleen in werking als er een unieke sleutelovertreding zou zijn geweest.

Hier is een veelgebruikte indeling:

 $query = "INSERT INTO $table (column1, column2, column3)
 VALUES ('value-1', 'value-2', 'value-3')
 ON DUPLICATE KEY UPDATE
 column1 = values(column1),
 column2 = values(column2),
 column3 = values(column3);"

column1 = values(column1) betekent "Werk kolom1 bij met de waarde die zou zijn ingevoegd als de zoekopdracht de dubbele sleutel niet had geschonden." Met andere woorden, het betekent gewoon kolom 1 bijwerken naar wat het zou zijn geweest als de invoeging had gewerkt.

Als u naar deze code kijkt, lijkt het niet correct dat u alle drie de kolommen die u probeert in te voegen, bijwerkt. Welke van de kolommen heeft een unieke beperking?

EDIT:Aanpassen op basis van 'SET'-formaat van mysql insert-instructie volgens de vraag uit de OP.

In principe te gebruiken ON DUPLICATE KEY UPDATE , u schrijft gewoon de insert-instructie zoals u normaal zou doen, maar voegt de ON DUPLICATE KEY UPDATE toe clausule op het einde geplakt. Ik denk dat het als volgt zou moeten werken:

INSERT INTO $table 
    set column1 = 'value-1',
        column2 = 'value-2',
        column3 = 'value-3'
ON DUPLICATE KEY UPDATE
    column1 = values(column1),
    column2 = values(column2),
    column3 = values(column3);

Nogmaals, een van de kolommen die u invoegt, moet een unieke index hebben (of een combinatie van de kolommen). Dat kan zijn omdat een van hen de primaire sleutel is of omdat er een unieke index op de tafel ligt.



  1. docker-compose:MySQL db elke keer opnieuw initialiseren

  2. mySQL - overeenkomende Latijnse (Engelse) formulierinvoer met utf8 (niet-Engelse) gegevens

  3. Een reis door de GIMR

  4. Sorteren op datum (nieuwste)