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

Utilizzo dell'istruzione IF in MySQL per aggiornare o inserire senza stored procedure?

MySQL ha funzionalità speciali in questa situazione. Si chiama INSERT...ON DUPLICATE KEY UPDATE . Quello che fa è provare a INSERT un record ma se esiste già, sarà solo UPDATE esso. '

Per far funzionare questa funzionalità, devi avere un UNIQUE vincolo sul tavolo. Sulla base del tuo esempio, posso vedere che stai controllando le due colonne per verificarne l'esistenza. Se hai già una PRIMARY KEY , puoi semplicemente aggiungere un UNIQUE vincolo su entrambe le colonne.

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

Una volta eseguito, ora puoi usare INSERT..ON DUPLICATE KEY UPDATE

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