深入浅出PostgreSQL
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.8 数据的插入、修改和删除

本节介绍如何向表中插入数据、修改数据和删除数据。

3.8.1 实例16:向表中插入数据

一个刚创建的表是没有数据的。必须插入数据,这个表才能发挥作用。用户可以使用INSERT命令向表中插入数据。

方式1 不指定字段插入数据

(1)创建department表,代码如下:

(2)使用INSERT命令插入数据,代码如下:

当插入数据时需要表的名称和字段的值。字段的值可以是常量,也可以是常量表达式。

在上面的实例中,VALUES关键字后面的参数是表中各个字段的取值列表,该列表的顺序和表中字段顺序必须一致。所以,在采用这种方式向表中插入数据时,用户必须知道表中字段的顺序。

方式2 指定字段插入数据

如果不想拘泥于表中的字段顺序,则需要在语句中增加字段名列表,插入的各个字段值与列出的字段名列表依次对应。下面两个语句的运行效果是一样的。

语句1如下:

语句2如下:

提示:

如果表中字段有默认值,则INSERT语句中就可以忽略该字段。如下所示,createtime字段的默认值为空值,当不需要给该字段显式赋值时,INSERT语句可以省略该字段的赋值。

postgres=#INSERT INTO department (deptid,deptname) VALUES (1,′IT′);

INSERT 0 1

方式3 字段值从左到右匹配插入数据

下面这种形式是PostgreSQL的一个扩展形式。值列表中的数据会从左到右依次匹配到字段中,剩余没有匹配到的字段则取默认值,代码如下:

也可以直接采用下面这种形式,第3个字段的值取默认值,代码如下:

方式4 所有的字段都取默认值时插入数据

如果表的所有字段有默认值或允许为空值,则一条记录所有的字段都取默认值时,也可以直接使用CREATE TABLE命令插入数据。下面定义一个所有字段允许为空值的department_default表,代码如下:

例如,向department_default表插入数据,所有字段都取默认值,代码如下:

方式5 同时插入多条数据

【举例】使用INSERT命令同时插入多条数据,代码如下:

3.8.2 实例17:修改表中的数据

如果表中已经存在数据,可以使用UPDATE命令修改数据。UPDATE命令可以修改一条或多条记录的所有字段的值或部分字段的值。

UPDATE命令需要以下3个方面的信息。

● 待修改数据的表名和字段名。

● 字段修改后的值。

● 哪些行需要修改。

【举例】修改department表,将字段deptid=2的记录中的字段createtime的值修改为“2018-09-01 00:00:00”,代码如下:

其中,UPDATE后面是表名,SET子句由字段名、等号、字段取值组成,WHERE子句由字段名、等号、字段取值组成。

如果没有语句符合UPDATE命令的条件,则语句不会报错。

在UPDATE命令中可以同时更新多个字段,字段之间用逗号分隔,代码如下:

1.SET子句

在SET子句中,字段的值可以是一个表达式(与表中字段相关的表达式)。

【举例】在department表中,所有字段deptid的值在原有的基础上增加10,代码如下:

2.WHERE子句

WHERE子句不是必需的。如果没有WHERE子句,则表中所有的记录都会被修改。

WHERE子句中的等号和SET子句中的等号作用是不同的。

● WHERE子句中的等号用于比较,这里也可以是其他比较运算符。

● SET子句中的等号用于赋值。

【举例】在department表中,将deptname等于“IT”的所有字段的deptid值在原有的基础上增加10,代码如下:

3.8.3 实例18:删除表中的数据

下面介绍如何删除表中的数据。与插入数据一样,必须删除整行数据,不允许只删除一行中的某些字段。

● 如果表中有主键,则可以通过主键直接定位到某个特定的行。

● 如果表中没有主键,则只能通过特定的条件来匹配表中需要删除的数据。

删除数据需要使用DELETE命令。与UPDATE命令类似,一次可以删除一行数据,也可以删除多行数据或所有数据。

【举例】删除department表中所有deptid<5的数据,代码如下:

【举例】删除department表中所有数据,代码如下: