创建表后,表中不包含任何数据。在数据库可以实际使用之前,首先要做的是插入数据。数据一次插入一行。您也可以在单个命令中插入多行,但无法插入不完整的行。即使您只知道一些列的值,也必须创建完整的行。
要创建新行,请使用 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 章) 的全部功能来计算要插入的行。
如果您在文档中发现任何不正确的内容,与您对特定功能的体验不符,或者需要进一步说明,请使用 此表单 报告文档问题。