登录
6.1. 插入数据#
创建表后,表中不包含任何数据。在数据库变得有用之前,首先要做的就是插入数据。一次插入一行数据。您也可以在单个命令中插入多行,但不能插入不完整的一行。即使您只知道某些列值,也必须创建完整的一行。
要创建新行,请使用INSERT命令。该命令需要表名和列值。例如,考虑第 5 章中的 products 表
CREATE TABLE products (
product_no integer,
name text,
price numeric
);
插入行的示例命令如下
INSERT INTO products VALUES (1, 'Cheese', 9.99);
数据值按列在表中出现的顺序列出,并用逗号分隔。通常,数据值将是文本(常量),但标量表达式也允许。
上述语法存在一个缺点,即您需要知道表中列的顺序。为避免这种情况,您还可以显式列出列。例如,以下两个命令都与上述命令具有相同的效果
INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', 9.99);
INSERT INTO products (name, price, product_no) VALUES ('Cheese', 9.99, 1);
许多用户认为始终列出列名是一种好习惯。
如果您没有所有列的值,则可以省略其中一些。在这种情况下,列将填充其默认值。例如
INSERT INTO products (product_no, name) VALUES (1, 'Cheese');
INSERT INTO products VALUES (1, 'Cheese');
第二种形式是PostgreSQL扩展。它从左侧填充列,其值尽可能多,其余值将默认为默认值。
为了清楚起见,您还可以显式请求默认值,针对各个列或整个行
INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', DEFAULT);
INSERT INTO products DEFAULT VALUES;
您可以在单个命令中插入多行
INSERT INTO products (product_no, name, price) VALUES
(1, 'Cheese', 9.99),
(2, 'Bread', 1.99),
(3, 'Milk', 2.99);
还可以插入查询结果(可能没有行、一行或多行)
INSERT INTO products (product_no, name, price)
SELECT product_no, name, price FROM new_products
WHERE release_date = 'today';
这提供了 SQL 查询机制(第 7 章)的全部功能,用于计算要插入的行。