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

Bruger du IF-sætning i MySQL til at opdatere eller indsætte uden Stored Procedure?

MySQL har speciel funktionalitet i denne situation. Det hedder INSERT...ON DUPLICATE KEY UPDATE . Det, den gør, er, at den forsøger at INSERT en post, men hvis den allerede eksisterer, vil den bare UPDATE det. '

For at få denne funktionalitet til at fungere, skal du have en UNIQUE begrænsning på bordet. Baseret på dit eksempel kan jeg se, at du tjekker de to kolonner for deres eksistens. Hvis du allerede har en PRIMARY KEY , du kan bare tilføje en UNIQUE begrænsning på begge kolonner.

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

Når det er blevet udført, kan du nu bruge 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. CannotAcquireLockException (Spring, Hibernate, MySQL)

  2. MySQL COUNT FORSKEL

  3. Er GUID-kollisioner mulige?

  4. Oracle-certificeringer