Мое понимание вставок и обновлений в Кассандре было то, что они были в основном то же самое.Это также сказано в документации (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