插入查询将取决于同一表中的先前数据吗?

时间:2019-04-22 06:27:44

标签: mysql sql

如果它的一个特定列值仍然不可用,我想插入一行。如果可用,我想更新该行。否则它将正常插入。该任务的SQL查询应该是什么?

例如: id,Product_id,user_id,数量是表格的属性

考虑, [1,450,56,2]在表中。

如果我要插入[2,450,56,3],则不会创建新行。它将更新上一行。就像[1,450,56,5]。

2 个答案:

答案 0 :(得分:0)

您可以将product_id和user_id设置为表上的主键或唯一键,然后使用INSERT .. ON DUPLICATE KEY UPDATE。您可以找到有关here的更多信息。

它看起来像:

INSERT INTO t1 (id, product_id, user_id, quantity) VALUES (2,450,56,3)
  ON DUPLICATE KEY UPDATE quantity = quantity + 3;

或者,您将不得不编写自己的 merge 语句(MySql不支持merge,但是您可以伪造)

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_updateValue`(IN prm_productid INT, IN prm_userid INT, IN prm_quantity INT)
BEGIN


-- Check that the case actually exists first.

DECLARE vExists INT;

SELECT COUNT(1) INTO vExists FROM YourTable WHERE product_id = prm_orderid AND user_id = prm_userid;

IF vCaseExists = 1 THEN

    UPDATE YourTable SET quantity = prm_quantity WHERE product_id = prm_orderid AND user_id = prm_userid;

ELSE 
    INSERT INTO YourTable (id, product_id, user_id, quantity) VALUES (2,450,56,3);
END IF;

END$$
DELIMITER ;

答案 1 :(得分:0)

首先,我将对product_iduser_id的组合创建一个唯一的约束(如果您还没有一个,甚至是主键):

ALTER TABLE mytable
ADD CONSTRAINT uc_product_user UNIQUE (product_id, user_id);

然后您可以在on duplicate语句中使用insert子句:

INSERT INTO mytable
VALUES (2, 450, 56, 3)
ON DUPLICATE KEY UPDATE quantity = quantity + VALUES(quantity);