2016-05-11 9 views

Antwort

1

REPLACE ist nur sinnvoll mit einzigartigen Schlüssel, sonst ist es INSERT nur gleichwertig ist und columns Tabellen unterstützen keine eindeutige Schlüssel.

Es gibt keine gute Möglichkeit, es effizient im Columnstore zu implementieren, da Columnstores im Allgemeinen nicht für Single-Row-Updates geeignet sind. Siehe http://docs.memsql.com/docs/columnstore.

Ein Weg, wie Sie es (nicht sehr effizient) implementieren können, ist mit Multistatement-Transaktionen. Führen Sie eine Auswahl aus, um zu sehen, ob eine übereinstimmende Zeile bereits vorhanden ist, führen Sie andernfalls ein Update aus, andernfalls führen Sie eine Einfügung aus.

z. sagen wir

create table c(i int, a int, key using clustered columnstore(i)); 

Wir tun können

memsql> begin; 
Query OK, 0 rows affected (0.00 sec) 

memsql> select count(*) from c where i = 4; 
+----------+ 
| count(*) | 
+----------+ 
|  0 | 
+----------+ 
1 row in set (0.00 sec) 

memsql> insert into c values (4, 4); 
Query OK, 1 row affected (0.00 sec) 

memsql> commit; 
Query OK, 0 rows affected (0.00 sec) 

im Fall, in dem es keine Übereinstimmung gibt, und

memsql> begin; 
Query OK, 0 rows affected (0.00 sec) 

memsql> select count(*) from c where i = 4; 
+----------+ 
| count(*) | 
+----------+ 
|  1 | 
+----------+ 
1 row in set (0.01 sec) 

memsql> update c set a = 4 where i = 4; 
Query OK, 1 row affected (0.01 sec) 
Rows matched: 1 Changed: 1 Warnings: 0 

memsql> commit; 
Query OK, 0 rows affected (0.00 sec) 

in dem Fall, dass eine Übereinstimmung besteht.