【问题标题】:How to insert data if not exist else update it?如果不存在如何插入数据,否则更新它?
【发布时间】:2018-06-27 19:54:37
【问题描述】:

如果表 bag 中存在,我想更新行,否则插入新行

我在桌袋中使用的这些类型的列

car_name : varchar
p_id : int
quantity : int
price_one_piece : int

我将car_namep_id 设为主要(复合键)

我在 xampp 中的 MySQL 例程中编写了这段代码,它保存在 xampp 中没有错误,但是当我尝试在 xampp 中执行它时,它会出错

以下查询失败:“SET @p0='mohamed'; SET @p1='1'; SET @p2='1'; SET @p3='1'; CALL bag_insert(@p0, @p1,@p2,@p3);" MySQL 说:

#1062 - Duplicate entry 'car_name-1' for key 'PRIMARY'

代码:

IF EXISTS(SELECT * FROM bag WHERE p_id = p_id and `car_name`= car_name)THEN 
UPDATE bag set`car_name`='car_name',`p_id`=p_id,`quantity`=quantity,`price_one_piece`=price_one_piece WHERE `p_id`=p_id;

ELSE 
INSERT INTO bag (car_name,p_id,quantity,price_one_piece) VALUES (car_name,p_id,quantity,price_one_piece); 
END IF

【问题讨论】:

  • 为什么不使用ON DUPLICATE KEY
  • 将复合键设为主键时如何使用
  • 存储过程的参数名称与该过程将访问的表中的字段名称不明确/相同通常不是一个好主意。它使阅读变得更加困难,而且 MySQL 通常会使用您不期望的那个。如果错误来自影响多行的 UPDATE,我不会感到惊讶。
  • 任何键冲突都会触发它。您可以在此时定义您想要的任何行为。
  • 我将 car_name 和 p_id 作为主键(复合键)

标签: mysql stored-procedures xampp


【解决方案1】:

我用

解决了问题
> replace INSERT INTO bag (car_name,p_id,quantity,price_one_piece)
> VALUES (car_name,p_id,quantity,price_one_piece);

我在https://chartio.com/resources/tutorials/how-to-insert-if-row-does-not-exist-upsert-in-mysql/找到了解决方案

【讨论】:

    猜你喜欢
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    相关资源
    最近更新 更多