在 Cassandra 中,INSERT 和 UPDATE 之间没有区别 - 一切都是 UPSERT,所以当您执行 UPDATE 并且数据不存在时,它会被插入。或者如果你做INSERT并且数据已经存在,它将被更新。
关于地图更新,可以在UPDATE时对对应列进行+和-操作。比如我有一张桌子:
CREATE TABLE test.m1 (
id int PRIMARY KEY,
i int,
m map<int, text>
);
我可以执行以下操作来更新现有行:
cqlsh:test> insert into test.m1 (id, i, m) values (1, 1, {1:'t1'});
cqlsh:test> select * from test.m1;
id | i | m
----+---+-----------
1 | 1 | {1: 't1'}
(1 rows)
cqlsh:test> update test.m1 set m = m + {2:'t2'}, i = 4 where id = 1;
cqlsh:test> select * from test.m1;
id | i | m
----+---+--------------------
1 | 4 | {1: 't1', 2: 't2'}
(1 rows)
我可以使用类似的UPDATE 命令插入全新的数据:
cqlsh:test> update test.m1 set m = m + {6:'t6'}, i = 6 where id = 6;
cqlsh:test> select * from test.m1;
id | i | m
----+---+--------------------
1 | 4 | {1: 't1', 2: 't2'}
6 | 6 | {6: 't6'}
(2 rows)
通常,如果您知道给定主键之前不存在数据,那么UPDATE 和+ 是插入数据到set 或map 的更好方法,因为它不会生成一个墓碑当您在集合列上没有+ 时执行INSERT 或UPDATE 时生成。
附:您可以在following document 中找到有关使用集合的更多信息。