Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando a instrução IF no MySQL para atualizar ou inserir sem procedimento armazenado?


O MySQL tem uma funcionalidade especial nesta situação. Chama-se INSERT...ON DUPLICATE KEY UPDATE . O que ele faz é tentar INSERT um registro, mas se já existir, ele apenas UPDATE isto. '

Para que essa funcionalidade funcione, você precisa ter um UNIQUE restrição na mesa. Com base no seu exemplo, posso ver que você está verificando a existência das duas colunas. Se você já possui uma PRIMARY KEY , você pode simplesmente adicionar um UNIQUE restrição em ambas as colunas.
ALTER TABLE oc_product_attribute 
      ADD CONSTRAINT tb_uq UNIQUE(PRODUCT_ID, ATTRIBUTE_ID)

Uma vez que foi executado, agora você pode usar 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