Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utilisation de l'instruction IF dans MySQL pour mettre à jour ou insérer sans procédure stockée ?

MySQL a une fonctionnalité spéciale sur cette situation. Il s'appelle INSERT...ON DUPLICATE KEY UPDATE . Ce qu'il fait, c'est qu'il essaie de INSERT un enregistrement mais s'il existe déjà, il sera juste UPDATE ce. '

Pour que cette fonctionnalité fonctionne, vous devez avoir un UNIQUE contrainte sur la table. Sur la base de votre exemple, je peux voir que vous vérifiez son existence sur les deux colonnes. Si vous avez déjà une PRIMARY KEY , vous pouvez simplement ajouter un UNIQUE contrainte sur les deux colonnes.

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

Une fois exécuté, vous pouvez maintenant utiliser 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