数据更新与删除
与传统数据库一样,RisingWave 支持表内数据更新与删除。同时,当表内数据更改或删除时,建立在该表上的 物化视图也会随之被更新。
几个细节值得注意:
table
上的数据可以被更新或者删除,即便这个table
是通过create table ... with ...
语句创建的。当然,由于 RisingWave 不支持事务,用户需要格外小心数据正确性;source
不存放任何数据,因此用户也不能对source
进行任何更新或者删除操作;物化视图上的数据不可被用户直接更新或删除,这与传统数据库的设计一样。
代码示例
我们来快速验证一下 RisingWave 中物化视图如何处理上游删除或修改操作。
我们首先创建一个表 t
以及一个物化视图 mv
:
CREATE TABLE t (v1 int, v2 int);
insert into t values (1,10), (2,20), (3,30);
CREATE MATERIALIZED VIEW mv as select sum(v1) as v1_sum, sum(v2) as v2_sum from t;
这时候我们看一下物化视图中的结果是多少:
select * from mv;
我们得到以下结果:
v1_sum | v2_sum
--------+--------
6 | 60
(1 row)
我们再增加两行数据:
insert into t values (4,40), (5,50);
再来看一下物化视图结果:
select * from mv;
应该得到结果:
v1_sum | v2_sum
--------+--------
15 | 150
(1 row)
删除三行数据:
delete from t where v1 <= 3;
查看物化视图结果:
select * from mv;
应该得到结果:
dev=> select * from mv;
v1_sum | v2_sum
--------+--------
9 | 90
(1 row)