Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwenden der IF-Anweisung in MySQL zum Aktualisieren oder Einfügen ohne gespeicherte Prozedur?

MySQL hat für diese Situation eine spezielle Funktionalität. Es heißt INSERT...ON DUPLICATE KEY UPDATE . Was es tut, ist, es versucht INSERT ein Datensatz, aber wenn er bereits existiert, wird er nur UPDATE es. '

Damit diese Funktion funktioniert, benötigen Sie einen UNIQUE Einschränkung auf dem Tisch. Anhand Ihres Beispiels kann ich sehen, dass Sie die beiden Spalten auf ihre Existenz überprüfen. Wenn Sie bereits einen PRIMARY KEY haben , können Sie einfach einen UNIQUE hinzufügen Einschränkung für beide Spalten.

ALTER TABLE oc_product_attribute 
      ADD CONSTRAINT tb_uq UNIQUE(PRODUCT_ID, ATTRIBUTE_ID)

Sobald es ausgeführt wurde, können Sie nun INSERT..ON DUPLICATE KEY UPDATE verwenden

INSERT INTO oc_product_attribute (PRODUCT_ID, ATTRIBUTE_ID, OtherCol, TEXT)
SELECT  MAX(PRODUCT_ID), MAX(ATTRIBUTE_ID), 1, 'XYZ'
FROM
        (
            SELECT  PRODUCT_ID, NULL ATTRIBUTE_ID 
            FROM    oc_product_description 
            WHERE   NAME = 'PRODUCT_NAME_HERE'
            UNION ALL
            SELECT  NULL PRODUCT_ID, ATTRIBUTE_ID 
            FROM    oc_attribute_description 
            WHERE   NAME='ATTRIBUTE_NAME_HERE'
        ) x
ON  DUPLICATE KEY UPDATE TEXT = 'ABC'

-- change OtherCol to the name of your column which you want to insert 1