我正在尝试通过检查我的product_number
列是否已存在来更新我的数据库表。我知道您可以使用INSERT OR UPDATE ON DUPLICATE KEY
,但我尝试使用的列不是主键。
我在堆栈帖子上发现了以下查询,但是当我尝试使用phpMyAdmin运行它时,我一直收到错误Unrecognized statement type. (near Duplicate)
。
DECLARE @numrecords INT
SELECT @numrecords = count(*)
FROM users_remark
WHERE product_number = '444'
IF @numrecords > 0 THEN
UPDATE products
SET product_name = 'abc',
product_description = def,
product_detail = '',
product_price = '100',
product_price_canada = '200'
WHERE product_number = '444'
ELSE
INSERT INTO products (product_number, product_name, product_description, product_price)
VALUES (444, abc, def, 100)
END IF
为什么此查询不起作用?
有没有更好的方法来实现我想要实现的目标?
答案 0 :(得分:0)
我为你创建了一个程序:
DELIMITER $$
DROP PROCEDURE IF EXISTS insert_or_update $$
CREATE PROCEDURE insert_or_update(pProduct_number INT, pProduct_name VARCHAR(200), pProduct_description VARCHAR(200), pProduct_detail VARCHAR(200), pProduct_price FLOAT(15,2), pProduct_price_canada FLOAT(15,2))
BEGIN
DECLARE numrecords INT;
SELECT count(*) INTO numrecords FROM products WHERE product_number = pProduct_number;
IF numrecords > 0 THEN
UPDATE products SET
product_name = pProduct_name,
product_description = pProduct_description,
product_detail = pProduct_detail,
product_price = pProduct_price,
product_price_canada = pProduct_price_canada
WHERE product_number = pProduct_number;
ELSE
INSERT INTO products (product_number, product_name, product_description, product_price)
VALUES (pProduct_number, pProduct_name, pProduct_description, pProduct_price);
END IF;
END $$
DELIMITER ;
只打电话:
CALL insert_or_update(444, , 'abc', 'def', '', '100', '444');