所有字段为Ca

时间:2016-01-02 20:22:36

标签: cassandra cql

我对Cassandra很新,我正在尝试创建一个辅助表,除了已经存在的一个(例如PK为item_id的项目),以便能够通过不同的字段进行查询。

例如:

CREATE TABLE IF NOT EXISTS items_ids_by_field1_and_field2(
  item_id TEXT,
  field1  TEXT,
  field2  TEXT,

  PRIMARY KEY ((field1, field2), item_id));

INSERT工作正常,但是当我想在这个表上执行UPDATE时会出现问题,因为所有字段都是PK的一部分。

这个问题的解决方案是什么?感谢。

1 个答案:

答案 0 :(得分:4)

您不能UPDATE所有列都是主键的行的原因是因为Cassandra不允许您更改主键的值,因为您实际上将完全引用不同的行主键是如何唯一标识行。

如果您希望所有列都成为主键的一部分并且您想要更改其中一个列,则可以执行的操作是先删除现有行,然后插入新数据。由于您需要使用INSERT代替UPDATE所有列进行任何更改(因为它们都创建了主键),所以很好:

DELETE FROM items_ids_by_field1_and_field2 where field1='X' and field2='Y' and item_id='Z'
INSERT INTO items_ids_by_field1-and_field2 (field1, field2, item_id) values ('X', 'Y', 'A')

将完成您需要做的事情。如果'X', 'Y', 'Z'不存在,那对Cassandra来说不是问题。