Cassandra table 所有字段作为 PK
Cassandra table with all fields as PK
我是 Cassandra 的新手,我正在尝试创建一些助手 table 除了已经存在的助手(例如 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 工作正常,但是当我想对此 table 执行 UPDATE 时出现问题,因为所有字段都是 PK 的一部分。
这个问题的解决方案是什么?谢谢
您不能 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 来说不是问题。
我是 Cassandra 的新手,我正在尝试创建一些助手 table 除了已经存在的助手(例如 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 工作正常,但是当我想对此 table 执行 UPDATE 时出现问题,因为所有字段都是 PK 的一部分。
这个问题的解决方案是什么?谢谢
您不能 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 来说不是问题。