sql >> Databáze >  >> RDS >> Mysql

MySQL INSERT DO WHERE NOT EXIST

Můžete buď použít INSERT IGNORE nebo REPLACE nebo INSERT ... ON DUPLICATE KEY UPDATE ...

Každý z nich vyžaduje, abyste měli jedinečné omezení product_id, ip_address

INSERT IGNORE

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

bude ignorovat vložení, pokud záznam již existuje.

NAHRADIT

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

provede odstranění plus nové vložení.

VLOŽTE... AKTUALIZOVAT

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

Pokusí se vložit a pokud se to nezdaří, aktualizujte stávající záznam.

Ve vašem případě si myslím, že byste měli být v pořádku s INSERT IGNORE , pokud však chcete změnit jiné hodnoty, pokud záznam již existuje, INSERT ... UPDATE ... by mělo fungovat dobře.

Obecně bych nedoporučoval používat REPLACE pokud opravdu nechcete DELETE FROM table WHERE ... plus INSERT INTO TABLE ...

Aktualizovat

To vyžaduje (pro tento příklad) jedinečný index pro kombinovaný produkt, ip_address. Můžete toho dosáhnout pomocí

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


  1. Export tabulky do souboru se záhlavími sloupců (názvy sloupců) pomocí nástroje bcp a SQL Server 2008

  2. SUPER oprávnění pro tuto operaci

  3. Uložená procedura s volitelnými parametry WHERE

  4. hrábě přerušeno! neinicializovaná konstanta Mysql2