我有cassandra 2.1.15。 我有这张桌子
<ActionButton buttonColor="rgba(30,144,255,1)" style={styles.fabIcon}
onPress={this.fabPress}>
</ActionButton>
fabPress() {
this.props.navigator.push({
component : DetaislView
});
}
我试图将多条记录删除为
CREATE TABLE ks_mobapp.messages (
pair_id text,
belong_to text,
message_id timeuuid,
cli_time bigint,
sender text,
text text,
time bigint,
PRIMARY KEY ((pair_id, belong_to), message_id)
) WITH CLUSTERING ORDER BY (message_id DESC)
我收到错误:
instances.getCqlSession().execute(QueryBuilder.delete()
.from(AppConstants.KEYSPACE, "messages")
.where(QueryBuilder.eq("pair_id", pairId))
.and(QueryBuilder.eq("belong_to", currentUser.value("userId")))
.and(QueryBuilder.in("message_id", msgId)));
然后我尝试了:
Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: Invalid operator IN for PRIMARY KEY part message_id
它的工作很好。这是正确的方法吗?我不能将IN用于相同的分区键吗?
答案 0 :(得分:0)
查询中的DELETE仅支持分区键。
仅对分区键支持删除IN关系
答案 1 :(得分:0)
cassandra 2.x中的UPDATE和DELETE语句有一些WHERE子句限制
更具体地说,您只能在the last partition key column
上使用IN运算符。因此,在您的情况下,最后一个分区列为belong_to
。所以IN
只能在该列上使用。
然而,在cassandra 3.0中删除了这些限制。它将允许
在任何分区键列
上指定IN在任何群集列上指定IN
这是补丁https://issues.apache.org/jira/browse/CASSANDRA-6237
另请阅读http://www.datastax.com/dev/blog/a-deep-look-to-the-cql-where-clause