ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 6.1\. 插入数据 在创建完一个表的时候,它里面没有数据。 在数据库可以有点用处之前要做的第一件事就是向里面插入数据。 数据在概念上是每次插入一行。我们当然可以每次插入多行, 但是确实没有办法插入少于一行的数据。即使你只知道几个字段的数值, 那么你也必须创建一个完整的行。 使用[INSERT](#calibre_link-1382)命令创建一个新行。 这条命令要求提供表名字以及字段值。比如, 考虑来自[Chapter 5](#calibre_link-1570)的产品表: ``` 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); ``` > **Tip:** 要一次插入大量数据,可以看看[COPY](#calibre_link-777)命令。 它不像[INSERT](#calibre_link-1382)命令那么灵活,但是更高效。 参考[Section 14.4](#calibre_link-1190)获取更多有关装载海量数据的信息。