當表被建立時,它不包含任何資料。在資料庫能夠有多大用處之前,第一件事就是插入資料。資料是逐行插入的。您也可以在單個命令中插入多行,但不可能插入不是完整行的內容。即使您只知道某些列的值,也必須建立一個完整的行。
要建立新行,請使用 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 章)的全部功能,用於計算要插入的行。
如果您在文件中看到任何不正確、與您在使用特定功能時的經驗不符或需要進一步說明的內容,請使用 此表單 報告文件問題。