【发布时间】:2018-06-27 19:54:37
【问题描述】:
如果表 bag 中存在,我想更新行,否则插入新行
我在桌袋中使用的这些类型的列
car_name : varchar
p_id : int
quantity : int
price_one_piece : int
我将car_name 和p_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