是它在某種程度上可以在MySQL中使用的IF語句來更新或插入一條記錄到表中,而不必在存儲過程中做呢?在MySQL中使用IF語句來更新或插入沒有存儲過程?
鑑於我設置的性質,我不能在這個時候,這就是爲什麼我要求使用存儲過程..
基本上這就是我想要做的事:
這裏是我的代碼:
IF NOT EXISTS
(
SELECT * FROM `oc_product_attribute`
WHERE PRODUCT_ID = (SELECT PRODUCT_ID FROM `oc_product_description` WHERE NAME = 'PRODUCT_NAME_HERE')
AND ATTRIBUTE_ID = (SELECT ATTRIBUTE_ID FROM `oc_attribute_description` WHERE NAME='ATTRIBUTE_NAME_HERE')
)
THEN
INSERT INTO `oc_product_attribute`
VALUES
(
SELECT PRODUCT_ID FROM `oc_product_description` WHERE NAME = 'PRODUCT_NAME_HERE',
SELECT ATTRIBUTE_ID FROM `oc_attribute_description` WHERE NAME='ATTRIBUTE_NAME_HERE',
1,
'XYZ'
)
ELSE
UPDATE `oc_product_attribute`
SET TEXT = 'ABC'
WHERE PRODUCT_ID = (SELECT PRODUCT_ID FROM `oc_product_description` WHERE NAME = 'PRODUCT_NAME_HERE')
AND ATTRIBUTE_ID = (SELECT ATTRIBUTE_ID FROM `oc_attribute_description` WHERE NAME='ATTRIBUTE_NAME_HERE')
END IF
我得到這個錯誤與上面:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF NOT EXISTS (SELECT * FROM `oc_product_attribute` WHERE PRODUCT_ID = (SELE' at line 1
請注意,我需要做上面只有一個聲明。我無法跨越到多個語句來實現上述功能。也沒有存儲的過程:)
解決:
正如戈登指出,ON DUPLICATE KEY
正是我需要的。這裏是一個工作的最後聲明:
INSERT INTO `oc_product_attribute`
VALUES
(
(SELECT PRODUCT_ID FROM `oc_product_description` WHERE NAME = 'PRODUCT_NAME_HERE'),
(SELECT ATTRIBUTE_ID FROM `oc_attribute_description` WHERE NAME='ATTRIBUTE_NAME_HERE'),
1,
'XYZ'
)
ON DUPLICATE KEY UPDATE TEXT='ABC';
但這是假設表有兩種PRIMARY KEY
或UNIQUE
約束它,或兩者兼而有之。
。 。您可能需要'在重複鍵更新「語法中插入...。看看https://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html。 –