数据的操作(更新删除)
专栏内容:
- postgresql内核源码分析
- 手写数据库toadb
- 并发编程
个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.
一、概述
已经存储在数据库中的数据,在日常使用过程中,在现实当中一些数据已经发生了变化,相应的我们需要更新或者删除数据库中的数据条目,让它们变得更加有效,减少数据的冗余。
本章节主要分享如何更新 update, 删除 delete数据。
二、数据更新 udpate
数据的更新,顾名思义就是将原来的旧值变更为另一个新值,这里就需要SQL的update
命令,下面我们先介绍命令的语法,再通过案例来熟悉命令的使用和技巧。
2.1 udpate 语法
UPDATE table_name1
SET column1 = value1,
column2 = value2,
...
WHERE conditions;
还可以写成这样的形式:
UPDATE table_name1
SET (column1,column2, ...)
= (value1, value2, ...)
WHERE conditions;
说明
-
UPDATE
命令后面是被修改的表名; -
SET
子句中,列出了被修改的列,以及修改后的新值;这里可以是多个列一起修改,但都对应到被修改表中; - 当然可以通过
WHERE
子句指定过滤条件,只有满足条件的行才会被修改; - 执行成功后,返回符合的行数量;
下面我们通过几个案例来看看update
命令的几种用法。
2.2 基本使用
这里先创建一张表users,用于后面的演示。
postgres=# create table users(uid int primary key, uname varchar(30), age int);
CREATE TABLE
postgres=# insert into users values(1,'lilei', 16),(2,'markhu',22);
INSERT 0 2
postgres=# select * from users;
uid | uname | age
-----+--------+-----
1 | lilei | 16
2 | markhu | 22
(2 rows)
发现名字写错了,需要更正一下。
postgres=# update users set uname = 'lihua' ;
UPDATE 2
postgres=# select * from users;
uid | uname | age
-----+-------+-----
1 | lihua | 16
2 | lihua | 22
(2 rows)
这里更正名字,可以看到一次更新了2行数据,查询可以看到,两行数据的名字都变了。
也就是说,没有条件限制时,会对所有行进行更新。
2.3 条件过滤更新
如何能精确的更新,下面来看带筛选条件的更新。
我们将前面更新错误的数据再纠正一下。
postgres=# update users set uname='markhu' where uid=2;
UPDATE 1
postgres=# select * from users;
uid | uname | age
-----+--------+-----
1 | lihua | 16
2 | markhu | 22
(2 rows)
通过uid进行筛选,只更新一行数据。
当然数据复杂时,可以带更多的过滤条件,它与select查询时的where子句是一样的作用和用法。
2.4 表达式新值
在设置新值时,新值不仅可以是确定的值,也可以是表达式,也就是根据其它数据计算的结果。
发现年龄也有错误时,现在来纠正一下;
postgres=# update users set age = age+2 where uid=1;
UPDATE 1
postgres=# select * from users;
uid | uname | age
-----+--------+-----
2 | markhu | 22
1 | lihua | 18
(2 rows)
原来1号的年龄少报了两岁,更新时在原来的基础上再加2岁即可。
当然这里也可以依据其它列或表的值来计算新值。
三、数据删除 delete
数据维护时,对于冗余数据可以进行删除,使用delete
命令,同时可以带有条件选择,精确选择符合的行进行删除。
3.1 delete 语法
delete
命令的SQL语法形式如下:
DELETE FROM table_name1
WHERE conditions;
说明
-
delete from
命令后面是被操作的表名; - 可以使用
where
子句来进行筛选要删除的行; - 符合的行都会被删除,命令执行成功后返回符合的行数量;
3.2 删除单行数据
为了演示的清晰,再往users表中多插入几条数据。
postgres=# insert into users values(3,'xueni',68),(4,'wuguang',77),(5,'xiaoming',8),(6,'zhouhui',28);
INSERT 0 4
postgres=# select * from users;
uid | uname | age
-----+----------+-----
2 | markhu | 22
1 | lihua | 18
3 | xueni | 68
4 | wuguang | 77
5 | xiaoming | 8
6 | zhouhui | 28
(6 rows)
在一张表中,已经有很多数据时,删除单行数据,就需要严格的条件过滤。
postgres=# delete from users where age>70;
DELETE 1
postgres=# select * from users;
uid | uname | age
-----+----------+-----
2 | markhu | 22
1 | lihua | 18
3 | xueni | 68
5 | xiaoming | 8
6 | zhouhui | 28
(5 rows)
可以看到age=77的行被删除了。
有时可能没有符合条件的数据行, 例如:
postgres=# delete from users where age>70;
DELETE 0
此时返回0,表示符合条件的行数为0;
3.3 删除多行数据
当然也可以一次删除多行数据,指定删除age>25的数据行;
postgres=# delete from users where age > 25;
DELETE 2
postgres=# select * from users ;
uid | uname | age
-----+----------+-----
2 | markhu | 22
1 | lihua | 18
5 | xiaoming | 8
(3 rows)
可以看到一次删除了两行。
特别注意:在不指定筛选条件时,会删除表中的所有数据,也就是所有行都是符合条件的。
postgres=# delete from users;
DELETE 3
postgres=# select * from users ;
uid | uname | age
-----+-------+-----
(0 rows)
可以看到表被清空了,大家在使用delete
命令时一定要小心谨慎。
四、总结
本文分享了表中数据的按字段进行更新,新值可以使用明确的值,也可以通过表达式计算得到;
如果有冗余数据时,也可以使用delete
命令进行删除;更新和删除命令,都可以带有条件筛选,精确操作到条件符合的行。
结尾
非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!
作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。文章来源:https://www.toymoban.com/news/detail-851321.html
注:未经同意,不得转载!文章来源地址https://www.toymoban.com/news/detail-851321.html
到了这里,关于【postgresql 基础入门】update命令与delete命令,表达式作为值,带筛选条件的删除,避够清空全表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!