提示:小心并关闭 AUTOCOMMIT

INSERT 命令用于向表中存储一行或多行新数据。这些新行的内容可以是固定值,也可以是运行时由 SELECT 语句计算的结果。因此,INSERT 命令有两种语法形式:静态插入和动态插入。


静态插入

静态插入的语法如下:

-- INSERT 命令的静态版本
INSERT INTO <tablename> (<list_of_columnnames>)
VALUES                  (<list_of_values>),
                        (<list_of_values>),
                        (<list_of_values>),
                             ... ;

在表名后列出需要插入的列名,VALUES 关键字之后提供一列或多列的值列表。每个值列表表示一行新数据。列名与值列表的数量必须一致,数据类型也需匹配。

示例 1:插入一行数据

INSERT INTO person (id,  firstname,       lastname,    date_of_birth,     place_of_birth, ssn,           weight)
VALUES             (91,  'Larry, no. 91', 'Goldstein', DATE'1970-11-20', 'Dallas',        '078-05-1120', 95);
COMMIT;

示例 2:插入多行数据

INSERT INTO person (id,  firstname,       lastname,    date_of_birth,     place_of_birth, ssn,           weight)
VALUES             (92,  'Larry, no. 92', 'Goldstein', DATE'1970-11-20', 'Dallas',        '078-05-1120', 95),
                   (93,  'Larry, no. 93', 'Goldstein', DATE'1970-11-20', 'Dallas',        '078-05-1120', 95),
                   (94,  'Larry, no. 94', 'Goldstein', DATE'1970-11-20', 'Dallas',        '078-05-1120', 95);
COMMIT;

示例 3:列顺序任意

列的顺序可以随意更改,只要列名和值保持一致即可。

INSERT INTO person (date_of_birth, firstname, ssn, lastname, place_of_birth, weight, id)
VALUES             (DATE'1970-11-20', 'Larry, no. 95', '078-05-1120', 'Goldstein', 'Dallas', 95, 95);
COMMIT;

示例 4:省略不必要的列

可以省略部分列,这些列会自动填充为默认值或 NULL 特殊标记(取决于 CREATE TABLE 声明)。

INSERT INTO person (id,  firstname,       lastname,     weight)
VALUES             (96,  'Larry, no. 96', 'Goldstein',  95);
COMMIT;

清理数据

要清理示例插入的数据,可以使用以下命令:

DELETE FROM person WHERE id BETWEEN 91 AND 96;
COMMIT;

动态插入

动态插入的值并非固定,而是运行时从其他表、函数或计算结果中获取。插入的行数也可以是动态的。在这种情况下,VALUES 子句将被替换为 SELECT 子查询。例如:

INSERT INTO person (id, firstname, lastname)
SELECT id, firstname, lastname
FROM another_table
WHERE some_condition;

动态插入的其他规则(如列数和顺序匹配)与静态插入一致。动态插入的更多用法将在 高级 INSERT 页面中详细讲解。

Last modified: Tuesday, 28 January 2025, 1:21 PM