插入或更新(如果存在)不必使用主键

时间:2017-01-10 18:59:02

标签: php mysql

我正在尝试通过检查我的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

为什么此查询不起作用?

有没有更好的方法来实现我想要实现的目标?

1 个答案:

答案 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');