SQL语句包括IF EXIST

时间:2013-03-05 19:27:52

标签: 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语法错误出错。

但是,当我单独运行UPDATE,SELECT,INSERT语句时,我没有错误。 可能是什么问题?

由于

3 个答案:

答案 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