對Cassandra執行CQL時,UPDATE
和INSERT
之間有什麼區別?Cassandra中UPDATE和INSERT的區別?
它看起來像曾經沒有區別,但現在documentation說INSERT
不支持計數器,而UPDATE
不支持計數器。
是否有「首選」方法使用?還是有一種情況下應該使用另一種?
非常感謝!
對Cassandra執行CQL時,UPDATE
和INSERT
之間有什麼區別?Cassandra中UPDATE和INSERT的區別?
它看起來像曾經沒有區別,但現在documentation說INSERT
不支持計數器,而UPDATE
不支持計數器。
是否有「首選」方法使用?還是有一種情況下應該使用另一種?
非常感謝!
Cassandra中的計數器列不能設置爲任意值:它們只能以任意值遞增或遞減。
因此,INSERT
不支持Counter Column,因爲您無法將值插入到Counter列中。你只能用UPDATE
(增加或減少)某個值。您將如何更新Counter列。
UPDATE ... SET name1 = name1 + <value>
你問:
是否有一個 「首選」 的方法來使用?還是有一種情況下應該使用另一種?
是的。如果要將值插入數據庫,則可以使用INSERT
。如果該列不存在,它將爲您創建。否則,INSERT
的效果與UPDATE
類似。 INSERT
在您沒有預先設計的模式(動態列族,即隨時插入任何東西)時非常有用。如果您事先設計架構(靜態列族,類似於RDMS)並知道每一列,那麼您可以使用UPDATE
。
非常感謝,這真的澄清了事情! – 2013-05-14 18:40:48
不是說它們是一樣的嗎?即「與SQL不同,INSERT和UPDATE的語義是相同的。」 http://www.datastax.com/docs/1.1/references/cql/INSERT – Pinocchio 2014-04-05 23:53:41
有一個微妙的區別。如果您將所有非關鍵字字段設置爲空,則通過INSERT插入記錄將保留。如果您將所有非關鍵字字段設置爲空,則通過UPDATE插入的記錄將消失。
試試這個:
CREATE TABLE T (
pk int,
f1 int,
PRIMARY KEY (pk)
);
INSERT INTO T (pk, f1) VALUES (1, 1);
UPDATE T SET f1=2 where pk=2;
SELECT * FROM T;
返回:
pk | f1
----+----
1 | 1
2 | 2
現在,更新的每一行設置F1爲null。
UPDATE T SET f1 = null WHERE pk = 1;
UPDATE T SET f1 = null WHERE pk = 2;
SELECT * FROM T;
注意,行1所保持,而行2被去除。
pk | f1
----+------
1 | null
如果你看看這些使用卡桑德拉-CLI,你會看到在行如何添加不同的。
我確定想知道這是設計還是錯誤,並查看記錄的行爲。
好的!你有沒有獲得更多的見解呢? – 2014-07-07 12:59:37
以下是解釋:https://issues.apache.org/jira/browse/CASSANDRA-11805 – Milan 2017-07-17 07:11:14
關於通過billbaird突出的細微差別(我無法在該職位直接評論),其中如果所有非鍵字段都爲空的更新操作創建的行會被刪除:
,預計行爲,而不是基於在https://issues.apache.org/jira/browse/CASSANDRA-11805(它被關閉爲「不是問題」)的bug報告的錯誤
我第一次使用Spring Data時遇到了這個問題。我正在使用存儲庫的save(T entity)
方法,但沒有創建行。事實證明,Spring Data使用的是UPDATE
,因爲它確定該對象不是'新的'(不確定'isNew'的測試是否有意義),而我碰巧正在測試僅設置了關鍵字段的實體。
今年春季數據的情況下,卡珊德拉專用庫接口都提供insert
方法出現,如果這種行爲需要,而不是一直使用的INSERT
(雖然Spring的文檔不充分或者記錄這些細節)。
另一個細微的差異(我開始相信cql是cassandra的一個糟糕的接口,由於使用了類似的SQL語法,但語義略有不同,所以充滿了細節和警告)是在現有數據上設置TTL。使用UPDATE
即使新的實際值等於舊值,也無法更新密鑰的TTL。解決方案是插入新行,而新的TTL已設置
INSERT'和'UPDATE'之間是否存在任何性能差異? – Pankaj 2017-01-18 17:08:20
@Pankaj我也想知道這一點。你知道這方面的知識嗎? – niaomingjian 2017-02-24 06:00:53
對不起@niaomingjian我沒有找到關於此的更多信息。 – Pankaj 2017-03-11 18:56:41