mysql - 如果不存在则不工作

标签 mysql sql not-exists

IF NOT EXISTS(SELECT * FROM `user` WHERE `name`='Rutvij' AND `lang`='python')
    BEGIN
        INSERT INTO `user` VALUES ('Rutvij', 'python', 25)
    END
ELSE
    BEGIN
        UPDATE user SET `name`='Kanzaria' WHERE `name`='Rutvij'
    END

我正在 phpmyadmin sql 区域尝试上述查询。我正在使用xampp。它抛出错误,指出

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS(SELECT * FROM user) SELECT name FROM use' at line 1

我也尝试过下面的代码

IF NOT EXISTS(SELECT * FROM user WHERE name='Rutvij' AND lang='python')
    BEGIN
        INSERT INTO user VALUES ('Rutvij', 'python', 25)
    END
ELSE
    BEGIN
        INSERT INTO user VALUES ('Kanzaria', 'python', 25)
    END

奋斗了这么久。请帮忙。谢谢!!

最佳答案

MySQL 不允许使用 if 逻辑,除非您处于编程 block (存储过程、触发器或函数)中。

幸运的是,您可以使用 WHERE 逻辑执行相同的操作:

INSERT INTO user 
    SELECT 'Rutvij', 'python', 25
    FROM DUAL
    WHERE NOT EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python')
    UNION ALL
    SELECT 'Kanzaria', 'python', 25
    FROM DUAL
    WHERE EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python');

MySQL 应在 INSERT 之前处理 SELECT,因此只应插入一行。

或者,您可以将其作为两个 INSERT 执行,但顺序相反:

INSERT INTO user 
    SELECT 'Kanzaria', 'python', 25
    FROM DUAL
    WHERE EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python');

INSERT INTO user 
    SELECT 'Rutvij', 'python', 25
    FROM DUAL
    WHERE NOT EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python');

关于mysql - 如果不存在则不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35819895/

相关文章:

php - Laravel 可以处理高流量应用吗?

mysql - 在sql嵌套查询中比较同一个表

sql-server - 将列添加到表中(如果尚不存在)

java - Eclipse 'generate entities from tables' 和 'many to one' 关系

php - 如何在查询更新或未更新时获取错误消息 codeigniter

PHP 使用 GET 搜索 mysql 数据库的类别

SQL JOIN AND OR 条件

mysql - 如何使用mysql获取用户的顶层分层数据?

MySQL 从一个表查询 GROUPing,排除在另一个子查询中找到的结果

php - 如果不存在则插入新行并获取新的或现有的 id