MySQL:在尝试更新列之前检查值是否已存在

时间:2015-02-18 13:49:07

标签: mysql sql

我想在更新列之前检查我想要更新的值是否已存在于表中。

例如:如果我有一个名为标记的表,其名称为 refresh_token 标记。我只想更新一个空白的refresh_token,只要它们不存在具有相同值的其他refresh_token。

我有这个:

IF (NOT EXISTS(SELECT * FROM Tokens WHERE refresh_token = 'C08Rbs'))
          BEGIN
            UPDATE Tokens SET refresh_token='C08Rbs' WHERE id='2'
          END
        END;

但是它返回了一个错误:

ERROR 1064 (42000): 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 (NOT EXISTS(SELECT * FROM Tokens WHERE refresh_token = 'C08Rbs' at line 1

我该怎么做?

注意:我没有使用存储过程。我想用一个查询来做到这一点。

有没有办法可以使用if-else语句来做到这一点?因为如果值存在则执行语句

2 个答案:

答案 0 :(得分:0)

您可以在一个声明中执行此操作:

UPDATE Tokens
    SET refresh_token = 'C08Rbs'
    WHERE id = '2' AND
          NOT EXISTS (SELECT 1 FROM Tokens WHERE refresh_token = 'C08Rbs');

编辑:

糟糕!在MySQL中,您需要使用join

执行此操作
UPDATE Tokens t CROSS JOIN
       (SELECT COUNT(*) as cnt
        FROM Tokens
        WHERE refresh_token = 'C08Rbs'
       ) tc
    SET refresh_token = 'C08Rbs'
    WHERE id = '2' AND tc.cnt = 0;

答案 1 :(得分:0)

试试这个:

IF (SELECT tocken_id FROM Tokens WHERE refresh_token = 'C08Rbs') IS NOT NULL THEN
          BEGIN
            UPDATE Tokens SET refresh_token='C08Rbs' WHERE id='2'
          END
END IF;

其中tocken_id是唯一字段或Tockens表中的任何字段。