暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

梧桐数据库(WuTongDB):DML之更新数据

原创 鲁鲁 2024-06-05
1257

更新数据

修改已经存储在数据库中的数据的行为叫做更新。你可以更新单独的一行, 也可以更新表中所有的行,还可以更新其中的一部分行。我们可以独立地更新每个列, 而其它的列则不受影响。

要更新现有的行,使用UPDATE命令。这需要三种信息:

1. 表的名字和要更新的列名

2. 列的新值

3. 要更新哪些行

我们在 数据定义 里说过,SQL 通常并不为数据行提供唯一标识。 因此我们无法直接声明需要更新哪一行。但是,我们可以通过声明一个被更新的行必须满足的条件。

比如,这条命令将所有价格为 5 的产品重定价为 10 :

UPDATE products SET price = 10 WHERE price = 5;
复制

这样做可能导致零行、一行或多行数据被更新。 如果我们试图执行一个不匹配任何行的更新,也不会出错。

让我们仔细看看这个命令。首先是关键字UPDATE后面紧跟着表名。 表名也可以是用模式修饰的,会从模式路径中把它找出来。 然后是关键字SET跟着列名与一个等号以及新的列值。 新的列值可以是任意标量表达式,而不仅仅是常量。比如, 如果你想把所有产品的价格提高 10% ,可以用:

UPDATE products SET price = price * 1.10;
复制

如你所见,新值的表达式也可以引用行中现有的数值。我们还忽略了WHERE 子句。如果我们忽略了这个子句,那么表中所有的行都要被更新。 如果出现了WHERE子句,那么只有匹配其条件的行才会被更新。 请注意在SET子句中的等号是一个赋值,而在WHERE 子句中的等号是比较,不过这样并不会导致任何歧义。当然WHERE 条件不一定非得是等式判断。也可以使用很多其他的操作符。 但是表达式必须得出一个布尔结果。

你还可以在一个UPDATE命令中更新更多的字段, 方法是在SET子句中列出更多赋值语句。比如:

UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;
复制

备注

ORC, MAGMA, ROW, Hudi格式的表支持UPDATE操作。且WuTongDB暂时不支持分布键和主键的UPDATE操作。

//分布键不支持更新示例
postgres=# create table test(a int, b int) format 'magmaap' distributed by (A);

postgres=# update test set a =1;
ERROR:  Cannot parallelize an UPDATE statement that updates the distribution columns

//主键不支持更新示例
postgres=# create table test_pk(a int, b int, primary key(a,b)) format 'magmaap' distributed by (a);

postgres=# update test_pk set b=1;
ERROR:  cannot update primary key column "b" of relation "test_pk" in "magmaap" format
复制
最后修改时间:2024-08-05 09:22:27
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论