【发布时间】:2019-05-04 21:50:24
【问题描述】:
我对 Cassandra 中的插入和更新的理解是,它们基本上是同一回事。这也是文档所说的(https://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlUpdate.html?hl=upsert)
注意:与 INSERT 命令不同,UPDATE 命令支持计数器。否则,UPDATE 和 INSERT 操作是相同的。
所以除了对计数器的支持之外,它们应该是相同的。
但后来我遇到了一个问题,如果我将列设置为null,通过update 创建的行将消失,而如果使用insert 创建行,则不会发生这种情况。
cqlsh:test> CREATE TABLE IF NOT EXISTS address_table (
... name text PRIMARY KEY,
... addresses text,
... );
cqlsh:test> insert into address_table (name, addresses) values ('Alice', 'applelane 1');
cqlsh:test> update address_table set addresses = 'broadway 2' where name = 'Bob' ;
cqlsh:test> select * from address_table;
name | addresses
-------+-------------
Bob | broadway 2
Alice | applelane 1
(2 rows)
cqlsh:test> update address_table set addresses = null where name = 'Alice' ;
cqlsh:test> update address_table set addresses = null where name = 'Bob' ;
cqlsh:test> select * from address_table;
name | addresses
-------+-----------
Alice | null
(1 rows)
如果我跳过首先创建行的单独步骤,也会发生同样的事情。使用insert,我可以创建一个具有null 值的行,但如果我使用update,则找不到该行。
cqlsh:test> insert into address_table (name, addresses) values ('Caroline', null);
cqlsh:test> update address_table set addresses = null where name = 'Dexter' ;
cqlsh:test> select * from address_table;
name | addresses
----------+-----------
Caroline | null
Alice | null
(2 rows)
有人可以解释发生了什么吗?
我们正在使用 Cassandra 3.11.3
【问题讨论】:
-
在最后一种情况下,您不插入
null,而是插入一个字符串:'null' -
谢谢,我修正了最后一种情况(在与实际
null仔细检查后)。