sql >> Database >  >> RDS >> Mysql

MySQL INVOEGEN IN WAAR NIET BESTAAT

U kunt ofwel INSERT IGNORE . gebruiken of REPLACE of INSERT ... ON DUPLICATE KEY UPDATE ...

Elk vereist dat u een unieke beperking heeft op product_id, ip_address

INVOER NEGEREN

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

zal de invoeging negeren, als de invoer al bestaat.

VERVANG

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

zal een verwijdering en een nieuwe invoeging uitvoeren.

INSERT ... UPDATE

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

Zal proberen in te voegen en als dat niet lukt, update het bestaande record.

In jouw geval denk ik dat het goed moet komen met INSERT IGNORE , echter Als u andere waarden wilt wijzigen als het record al bestaat, INSERT ... UPDATE ... zou goed moeten werken.

Ik zou over het algemeen niet aanraden om REPLACE te gebruiken tenzij je echt een DELETE FROM table WHERE ... . wilt plus INSERT INTO TABLE ...

Bijwerken

Dit vereist (voor dit voorbeeld) een unieke index voor het combinatieproduct, ip_address. Dit bereik je met

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


  1. Een listener configureren in Oracle Database (12c, 18c en 19c edities)

  2. Opgeslagen procedure - retourneer identiteit als uitvoerparameter of scalair

  3. Niet-vastleggende groepen gebruiken in MySQL REGEXP

  4. BeanCreationException:fout bij het maken van bean met de naam 'flywayInitializer'