Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL语句包括(如果存在)_Mysql_Sql - Fatal编程技术网

Mysql 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语法错误中有一

我的项目中的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)