Mysql
 sql >> база данни >  >> RDS >> Mysql

Използване на оператор IF в MySQL за актуализиране или вмъкване без Съхранена процедура?

MySQL има специална функционалност в тази ситуация. Нарича се INSERT...ON DUPLICATE KEY UPDATE . Това, което прави, е, че се опитва да INSERT запис, но ако вече съществува, той просто ще UPDATE то. '

За да работи тази функционалност, трябва да имате UNIQUE ограничение на масата. Въз основа на вашия пример виждам, че проверявате двете колони за неговото съществуване. Ако вече имате PRIMARY KEY , можете просто да добавите UNIQUE ограничение за двете колони.

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

След като бъде изпълнено, вече можете да използвате 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. Покриване на Mysql срещу композитен срещу индекс на колона

  2. Ръководство за разбиране на моделите за мащабиране на базата данни

  3. DataTables, използващи PHP с MySQL:Как да модифицирам mysql заявката?

  4. SQL:Използване на GROUP BY и MAX за множество колони

  5. Помощ с payment_status PayPal Възстановени Възстановени Частично възстановени IPN