Насколько я понимаю, вставки и обновления в Cassandra были в основном одним и тем же. Об этом же говорится и в документации (https://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlUpdate.html?hl=upsert)
Примечание. В отличие от команды INSERT, команда UPDATE поддерживает счетчики. В остальном операции UPDATE и INSERT идентичны.
Так что кроме поддержки счетчиков они должны быть такими же.
Но затем я столкнулся с проблемой, когда строки, которые были созданы с помощью update
, исчезли бы, если я установил столбцы в null
, тогда как этого не произойдет, если строки созданы с помощью 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'
- person Alex Ott   schedule 03.12.2018null
). - person towr   schedule 03.12.2018