如果存在更新,则插入mysql

时间:2016-08-04 15:30:58

标签: mysql sql-server if-statement sql-update exists

IF EXISTS (SELECT * FROM two_player  WHERE title='math' and user2 is null)
 UPDATE two_player  SET score2='50' , user2='zahra' WHERE title='math' and user2 is null
 ELSE  
 INSERT INTO two_player  (user1,score1,title) values ('zahra', '50', 'math')

此查询在sql server中正常工作。但是我在mysql中遇到了这个错误:

  

*#1064 - 您的SQL语法出错;查看与MySQL服务器版本对应的手册,以便在第1行“IF EXISTS(SELECT * FROM two_player WHERE title ='math'和user2为null)附近使用正确的语法”

为什么? 有什么替代方案?

2 个答案:

答案 0 :(得分:1)

您可以使用商店程序解决此问题,如下所示

    DELIMITER $$
    DROP PROCEDURE IF EXISTS `select_or_insert`$$
    CREATE PROCEDURE select_or_insert()
    begin

    IF EXISTS (SELECT * FROM test WHERE id="id") THEN
       SELECT * FROM test WHERE id="id";
    ELSE
       INSERT INTO test (id,name) VALUES ("id",'name');
    END if;

    END$$

   DELIMITER ;

并将其称为:

call select_or_insert();

答案 1 :(得分:0)

使用替换而不是更新或插入: -

REPLACE INTO two_player  (user1,user2,score1,score2,title) values ('zahra', 'zahra','50','50', 'math')

在这种情况下,您必须拥有唯一索引。

根据您的编程语言,请尝试以下方法: -

UPDATE two_player  SET score2='50' , user2='zahra' WHERE title='math' and user2 is null

if updates_rows == 0:  
      INSERT INTO two_player  (user1,score1,title) values ('zahra', '50', 'math')