我的项目中有一个关于sql语句的问题。代码
IF EXISTS (SELECT * FROM person_drug WHERE drug_id=3 AND person_id=1)
BEGIN
UPDATE person_drug SET amount=3 WHERE drug_id=3 AND person_id=1
END
ELSE
BEGIN
INSERT INTO person_drug VALUES (1,3,3)
END
当我运行它时,我得到了:
1064 - 您的SQL语法错误出错。
但是,当我单独运行UPDATE,SELECT,INSERT
语句时,我没有错误。
可能是什么问题?
由于
答案 0 :(得分:1)
MySQL的流控制语句(IF/ELSE/WHILE
)只能在存储过程或函数的上下文中使用。它们不适用于交互式查询。
最佳解决方案是使用正确的索引和唯一性约束。
如果您在(drug_id, person_id)
之间定义了主键或唯一索引,那么您可以use ON DUPLICATE KEY UPDATE
并在一个语句中执行此整个操作:
/* key ensures uniqueness for drug_id, person_id */
ALTER TABLE person_drug ADD UNIQUE KEY (drug_id, person_id);
/* Then it's possible to use INSERT .. ON DUPLICATE KEY UPDATE */
INSERT INTO person_drug (drug_id, person_id, amount)
VALUES (3, 1, 3)
ON DUPLICATE KEY UPDATE amount = VALUES(amount)
答案 1 :(得分:0)
BEGIN
IF EXISTS (SELECT * FROM person_drug WHERE drug_id=3 AND person_id=1)
UPDATE person_drug SET amount=3 WHERE drug_id=3 AND person_id=1
ELSE
INSERT INTO person_drug VALUES (1,3,3)
END IF;
答案 2 :(得分:0)
如果您制作存储过程意味着您可以这样做:
SET ANSI_NULLS ON 走 SET QUOTED_IDENTIFIER ON GO
CREATE PROCEDURE person
AS BEGIN
SET NOCOUNT ON;
IF EXISTS
(SELECT * FROM person_drug WHERE drug_id=3 AND person_id=1)
BEGIN UPDATE person_drug SET amount = 3 WHERE drug_id = 3 AND person_id = 1 结束 其他 开始 INSERT INTO person_drug VALUES(1,3,3)
END 结束 GO