Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Używasz instrukcji IF w MySQL do aktualizacji lub wstawiania bez procedury przechowywanej?

MySQL ma specjalną funkcjonalność w tej sytuacji. Nazywa się INSERT...ON DUPLICATE KEY UPDATE . To, co robi, to próba INSERT rekord, ale jeśli już istnieje, po prostu UPDATE to. '

Aby ta funkcja działała, musisz mieć UNIQUE ograniczenie na stole. Na podstawie twojego przykładu widzę, że sprawdzasz dwie kolumny pod kątem ich istnienia. Jeśli masz już PRIMARY KEY , możesz po prostu dodać UNIQUE ograniczenie na obu kolumnach.

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

Po wykonaniu możesz teraz użyć 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. instalacja gem:nie udało się zbudować natywnego rozszerzenia gem (nie można znaleźć plików nagłówkowych)

  2. Zapobieganie wstrzykiwaniu SQL

  3. Sprawdź, czy istnieje baza danych (MySQL), a jeśli nie, utwórz ją w PHP

  4. Mapa JPA MySQL typu json, ma zniekształcony ciąg

  5. Wyszukiwanie pełnotekstowe z InnoDB w MySQL