sql >> Database teknologi >  >> RDS >> Mysql

Kan jeg bruge ON DUPLICATE KEY UPDATE med en INSERT-forespørgsel ved at bruge indstillingen SET?

Jeg har brugt ON DUPLICATE KEY UPDATE en masse. I nogle situationer er det ikke-standard SQL-udvidelse, der virkelig er værd at bruge.

Først skal du sikre dig, at du har en unik nøglebegrænsning på plads. ON DUPLICATE KEY UPDATE Funktionen starter kun, hvis der ville have været en unik nøgleovertrædelse.

Her er et almindeligt brugt format:

 $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) betyder "Opdater kolonne1 med den værdi, der ville være blevet indsat, hvis forespørgslen ikke havde ramt overtrædelsen af ​​dubletnøgle." Med andre ord betyder det blot, at du skal opdatere kolonne 1 til, hvad det ville have været, hvis indsatsen havde fungeret.

Ser man på denne kode, virker det ikke korrekt, at du opdaterer alle tre kolonner, du forsøger at indsætte. Hvilken af ​​kolonnerne har en unik begrænsning?

EDIT:Rediger baseret på 'SET'-formatet af mysql-indsæt-sætningen i henhold til spørgsmålet fra OP.

Grundlæggende at bruge ON DUPLICATE KEY UPDATE , du skriver bare insert-sætningen, som du plejer, men tilføjer ON DUPLICATE KEY UPDATE klausul sat på slutningen. Jeg tror, ​​det skal fungere sådan her:

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);

Igen skal en af ​​de kolonner, du indsætter, have et unikt indeks (eller en kombination af kolonnerne). Det kan være fordi en af ​​dem er den primære nøgle, eller fordi der er et unikt indeks på bordet.



  1. Vedvarende UUID i PostgreSQL ved hjælp af JPA

  2. Opret array i PHP fra mysql

  3. Skal MEDIUMINT undgås i MySQL?

  4. MySQL GROUP_CONCAT undslipper