PostgreSQL INSERT INTO 语句详解
在 PostgreSQL 中,
INSERT INTO 语句用于向表中插入新的数据行。它有多种使用方式,下面将详细介绍其语法和常见用法。基本语法
插入完整行
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
INSERT INTO:指定要插入数据的表名。(column1, column2, column3, ...):可选参数,指定要插入数据的列名。如果省略该部分,则必须为表中的所有列提供值,且值的顺序要与表中列的顺序一致。VALUES:指定要插入的数据值,值的数量和顺序必须与列名的数量和顺序一致。
示例:
假设我们有一个名为
假设我们有一个名为
employees 的表,包含 employee_id、first_name、last_name 和 salary 列。INSERT INTO employees (employee_id, first_name, last_name, salary)
VALUES (1, 'John', 'Doe', 5000);
插入部分行
如果只需要插入部分列的数据,可以只指定这些列的名称和对应的值。
INSERT INTO table_name (column1, column3)
VALUES (value1, value3);
示例:
INSERT INTO employees (first_name, salary)
VALUES ('Jane', 6000);
在这个例子中,
employee_id 和 last_name 列将使用表定义中的默认值(如果有的话),或者如果没有默认值且列允许 NULL,则为 NULL。插入多行数据
可以在一个
INSERT INTO 语句中插入多行数据,只需在 VALUES 子句中提供多个值列表,用逗号分隔。INSERT INTO table_name (column1, column2, column3, ...)
VALUES
(value1_1, value1_2, value1_3, ...),
(value2_1, value2_2, value2_3, ...),
(value3_1, value3_2, value3_3, ...);
示例:
INSERT INTO employees (employee_id, first_name, last_name, salary)
VALUES
(2, 'Alice', 'Smith', 5500),
(3, 'Bob', 'Johnson', 6500);
从其他表插入数据
可以使用
INSERT INTO ... SELECT 语句从一个表中选择数据并插入到另一个表中。INSERT INTO table_name (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM another_table
WHERE condition;
SELECT子句用于从another_table中选择要插入的数据。WHERE子句可选,用于过滤要插入的数据。
示例:
假设有一个名为
假设有一个名为
temp_employees 的临时表,其结构与 employees 表相同,我们可以将 temp_employees 表中的数据插入到 employees 表中。INSERT INTO employees (employee_id, first_name, last_name, salary)
SELECT employee_id, first_name, last_name, salary
FROM temp_employees
WHERE salary > 5000;
插入默认值
如果要插入列的默认值,可以使用
DEFAULT 关键字。INSERT INTO table_name (column1, column2)
VALUES (value1, DEFAULT);
示例:
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (4, 'Eve', DEFAULT);
在这个例子中,
salary 列将使用其默认值。处理冲突
在插入数据时,如果违反了表的唯一约束或主键约束,可以使用
ON CONFLICT 子句来处理冲突。INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON CONFLICT (conflict_column)
DO NOTHING;
ON CONFLICT:指定冲突发生时的处理方式。(conflict_column):指定发生冲突的列。DO NOTHING:表示当发生冲突时,不做任何操作。也可以使用DO UPDATE来更新冲突的行。
示例:
INSERT INTO employees (employee_id, first_name, last_name, salary)
VALUES (1, 'John', 'Doe', 5000)
ON CONFLICT (employee_id)
DO NOTHING;
在这个例子中,如果
employee_id 为 1 的记录已经存在,则不会插入新记录。以上就是 PostgreSQL 中
INSERT INTO 语句的详细语法和常见用法。
浙公网安备 33010602011771号