sql >> Base de Datos >  >> RDS >> Mysql

¿Usando la declaración IF en MySQL para actualizar o insertar sin un procedimiento almacenado?

MySQL tiene una funcionalidad especial en esta situación. Se llama INSERT...ON DUPLICATE KEY UPDATE . Lo que hace es intentar INSERT un registro, pero si ya existe, simplemente UPDATE eso. '

Para que esta funcionalidad funcione, debe tener un UNIQUE restricción sobre la mesa. Según su ejemplo, puedo ver que está comprobando la existencia de las dos columnas. Si ya tienes una PRIMARY KEY , solo puede agregar un UNIQUE restricción en ambas columnas.

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

Una vez que se haya ejecutado, ahora puede 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