sql >> データベース >  >> RDS >> Mysql

MySQLでIFステートメントを使用して、ストアドプロシージャなしで更新または挿入しますか?

    MySQLには、この状況に対応する特別な機能があります。これは、INSERT...ON DUPLICATE KEY UPDATEと呼ばれます。 。 INSERTを試行します レコードですが、すでに存在する場合は、UPDATEだけになります それ。 '

    この機能を動作させるには、UNIQUEが必要です。 テーブルの制約。あなたの例に基づいて、あなたがその存在について2つの列をチェックしていることがわかります。すでに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. MySQLWorkbenchでのフォントの変更

    2. mysql_real_escape_string()を使用するのに最も推奨される時間はいつですか

    3. promiseを使用してnode.jsのMySQL戻り値を処理します

    4. PostgreSQLで月ごとにグループ化する方法