Mysql SQL语句包括(如果存在)
我的项目中的sql语句有问题。代码Mysql SQL语句包括(如果存在),mysql,sql,Mysql,Sql,我的项目中的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语法错误中有一
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
语句时,我没有收到任何错误。
有什么问题吗
感谢MySQL的流控制语句(
IF/ELSE/WHILE
)只能在存储过程或函数的上下文中使用。它们在交互式查询中不起作用
最好的解决方案是使用适当的索引和唯一性约束
如果在(药品id、个人id)
中定义了主键或唯一索引,则可以在一条语句中执行整个操作:
/* 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)
如果创建存储过程意味着可以这样做: 将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 创建程序人员 作为 开始 开始 更新人员药品集金额=3,其中药品id=3,人员id=1 结束 其他的 开始 将药物值(1,3,3)插入人体内 结束 结束
GO这是在存储过程或函数中运行的吗?
IF/ELSE
流控制构造无法在MySQL中的该上下文之外执行。请删除IF
和ELSE
块中的BEGIN
和END
关键字
/* 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)
SET NOCOUNT ON;
IF EXISTS
(SELECT * FROM person_drug WHERE drug_id=3 AND person_id=1)