1

如何更新timeuuidCassandra 中的列?

我尝试了以下查询

cqlsh:mydb> UPDATE mytable SET mycolumn = '99b47d70-b465-11e9-8080-808080808080' WHERE mycolumn= '99a53b30-b465-11e9-8080-808080808080';

它失败并显示消息

InvalidRequest:来自服务器的错误:code=2200 [Invalid query] message="timeuuid 类型的“mycolumn”的无效字符串常量 (99b47d70-b465-11e9-8080-808080808080)”

所以我尝试将常量值转换为 timeuuid

cqlsh:mydb> UPDATE mytable SET mycolumn = cast('99b47d70-b465-11e9-8080-808080808080' as timeuuid) WHERE mycolumn= cast('99a53b30-b465-11e9-8080-808080808080' as timeuuid);

这次它失败并出现错误

SyntaxException:第 1:34 行在输入“(”处没有可行的替代方案(UPDATE mytable SET mycolumn = cast

我看到了有关 cast 函数的文档,并且timeuuid没有在任何其他类型的输出类型下列出。

https://docs.datastax.com/en/dse/5.1/cql/cql/cql_reference/refCqlFunction.html#refCqlFunction__cast

这是否意味着 timeuuid 列一旦创建就无法更新?

更新: 我在上面的页面上看到了以下信息

UPDATE 语句 SET 子句不能用于更改 PRIMARY KEY 字段;因此,只有当目标字段不是 PRIMARY KEY 字段的一部分时,才能设置新的 timeuuid。

因此,可以更新 timeuuid 列。mycolumn不是 PRIMARY 键的一部分。

更新 2:

即使以下命令也失败并出现相同的错误no viable alternative at input

UPDATE website SET api_key = api_key WHERE 1;

那么我做错了什么?

4

1 回答 1

1

我在通过 CQLsh (Cassandra) 插入硬编码 UUID中找到了解决方案

您不应该在 UUID 周围加上引号来阻止它被解释为字符串,即

无需引用 uuid

于 2019-08-01T14:40:38.400 回答