sql >> Databasteknik >  >> RDS >> Mysql

MySQL INSERT I DÄR INTE FINNS

Du kan antingen använda INSERT IGNORE eller REPLACE eller INSERT ... ON DUPLICATE KEY UPDATE ...

Var och en kräver att du har en unik begränsning på produkt-id, ip_adress

INSERT IGNORE

INSERT IGNORE INTO products VALUES (null, 111, '8.8.8.8')

ignorerar infogningen om posten redan finns.

ERSÄTT

REPLACE INTO products VALUES (null, 111, '8.8.8.8')

kommer att utföra en radering plus en ny infogning.

INSERT ... UPPDATERING

INSERT INTO products VALUES (null, 111, '8.8.8.8')
ON DUPLICATE KEY UPDATE products SET last_modified = NOW()

Kommer att försöka infoga och om det misslyckas uppdatera den befintliga posten.

I ditt fall tycker jag att du borde klara dig med INSERT IGNORE , men om du vill ändra andra värden om posten redan finns, INSERT ... UPDATE ... borde fungera bra.

Jag skulle i allmänhet inte rekommendera att använda REPLACE om du inte verkligen vill ha en DELETE FROM table WHERE ... plus INSERT INTO TABLE ...

Uppdatera

Detta kräver (för det här exemplet) ett unikt index för kombinationsprodukten, ip_address. Du kan uppnå detta med

ALTER TABLE products
ADD UNIQUE INDEX `UIDX_PRODUCT__IP_ADRESS`(product, ipaddress);


  1. Hur man uppdaterar data i en anpassad dialogruta

  2. Hur infogar man en uppdateringsbar post med JSON-kolumn i PostgreSQL med JOOQ?

  3. Ändra en SQL-kolumntitel via fråga

  4. Bästa metoder för att visa sökresultat med tillhörande textutdrag från det faktiska resultatet