sql >> Databasteknik >  >> RDS >> Mysql

Använder du IF-satsen i MySQL för att uppdatera eller infoga utan lagrad procedur?

MySQL har speciell funktionalitet i denna situation. Det heter INSERT...ON DUPLICATE KEY UPDATE . Vad den gör är att den försöker INSERT en post men om den redan finns kommer den bara att UPDATE Det. '

För att denna funktionalitet ska fungera måste du ha en UNIQUE begränsning på bordet. Baserat på ditt exempel kan jag se att du kontrollerar de två kolumnerna för dess existens. Om du redan har en PRIMARY KEY , du kan bara lägga till en UNIQUE begränsning på båda kolumnerna.

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

När den väl har körts kan du nu använda 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


  1. hur fungerar groupby and count i sql

  2. PHP-fel:Anrop till en medlemsfunktion rowCount() på ett icke-objekt

  3. ORA-01843 inte en giltig månad- Jämför datum

  4. Hur man ändrar alla tabellprefix i en enda fråga