Cassandra:输入时没有可行的替代方案 'IF'

Cassandra: no viable alternative at input 'IF'

此查询:

UPDATE jdtestbysentence."sparseSupplement" SET uuid = 2b22da9c-58a6-11e8-ae82-2d3e941502e8 WHERE a_uid = "1849" IF EXISTS

出现此错误:

no viable alternative at input 'IF' (...= 2b22da9c-58a6-11e8-ae82-2d3e941502e8 WHERE a_uid = ["184]9" IF...)

我对 Cassandra 还很陌生。 有人可以建议吗?

我已经在我的测试环境中对您的查询进行了一些修改,并且成功了。

UPDATE jdtestbysentence."sparseSupplement" SET uuid = 2b22da9c-58a6-11e8-ae82-2d3e941502e8 WHERE a_uid = '1849' IF EXISTS
UPDATE jdtestbysentence."sparseSupplement"
SET uuid = 2b22da9c-58a6-11e8-ae82-2d3e941502e8 WHERE a_uid = "1849" IF EXISTS

好的,所以我在本地创建了你的 table,如下所示:

CREATE TABLE "sparseSupplement" (uuid UUID, a_uid TEXT PRIMARY KEY);

我 运行 你的 CQL 更新,果然我收到了同样的错误信息。本质上,这里对引号的使用存在一些混淆。双引号仅在对 table 或列名强制区分大小写时使用。设置或检查 TEXT (a_uid) 的值时,您应该在 1849 左右使用单引号:

cassdba@cqlsh:Whosebug> UPDATE "sparseSupplement"
    SET uuid = 2b22da9c-58a6-11e8-ae82-2d3e941502e8
    WHERE a_uid = '1849' IF EXISTS;

 [applied]
-----------
     False

专业提示:另外,我要提醒您不要那样使用双引号。除非你绝对需要它来将大小写与 Java class 匹配,否则它只会使 table 的工作变得更加困难。有点像它在这里做的。