我是Cassandra的初学者,我有一个这样的表:
CREATE TABLE Books(
Title text PRIMARY KEY,
Authors set<text>,
Family set <text>,
Publisher text,
Price decimal
);
(其他选项缺失,因为这只是一个例子(
现在我想执行这个查询:
DELETE Price FROM Books WHERE Authors CONTAINS 'J.K. Rowling' IF EXISTS;
但它不起作用。我在谷歌上搜索了一下,但一无所获。
希望有人能帮助我,如果我的英语不太好,我很抱歉。
,但它不起作用。
这并没有给我们提供足够的信息来帮助您。通常,您需要提供一条错误消息。我在本地构建了您的表,插入了数据,并尝试了您的方法。这就是我看到的错误:
InvalidRequest: Error from server: code=2200 [Invalid query]
message="Some partition key parts are missing: title"
DELETE
要求在WHERE
子句中指定适当的PRIMARY KEY组件。在您的情况下,Authors
是PRIMARY KEY定义的部分,而不是部分。给定返回的错误消息(以及表定义(,指定title
是从此表中删除行的唯一方法。
aploetz@cqlsh:stackoverflow> DELETE FROM Books
WHERE title = 'Harry Potter and the Chamber of Secrets'
IF EXISTS;
[applied]
-----------
True
我可以做这样的查询吗?
UPDATE Books SET Family = Family + {'Fantasy'} WHERE Authors CONTAINS 'J.K. Rowling';
否。出于同样的原因,这项计划失败了。Cassandra中的写入(INSERTs、UPDATEs、DELETE都是写入(需要WHERE
子句中的主键(特别是分区键(。如果没有这一点,Cassandra就无法确定哪个节点保存数据,它需要这些数据来执行写入。