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

MySQL INDSÆT I HVOR IKKE FINDER

Du kan enten bruge INSERT IGNORE eller REPLACE eller INSERT ... ON DUPLICATE KEY UPDATE ...

Hver af dem kræver, at du har en unik begrænsning på product_id, ip_address

INDSÆT IGNORER

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

vil ignorere indsættelsen, hvis indtastningen allerede eksisterer.

UDSKIFT

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

vil udføre en sletning plus en ny indsættelse.

INDSÆT ... OPDATERING

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

Vil prøve at indsætte, og hvis det mislykkes, opdatere den eksisterende post.

I dit tilfælde synes jeg, du skal have det fint med INSERT IGNORE , men hvis du ønsker at ændre andre værdier, hvis posten allerede eksisterer, INSERT ... UPDATE ... burde fungere godt.

Jeg vil generelt ikke anbefale at bruge REPLACE medmindre du virkelig ønsker en DELETE FROM table WHERE ... plus INSERT INTO TABLE ...

Opdater

Dette kræver (for dette eksempel) et unikt indeks for kombinationsproduktet, ip_address. Du kan opnå dette med

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


  1. MELLEM forespørgsel ved hjælp af JDBC med MySQL

  2. MySQL VÆLG WHERE I LIST og IKKE I LIST i samme SQL

  3. Hvad er en database? Og en DBMS?

  4. Hvordan ser jeg Explain Plan i Oracle SQL-udvikler?