PostgreSQL INSERT INTO 语句完整实例详解

 更新时间:2026年10月30日 11:29:43   作者:Seal^_^  
本文详细介绍了PostgreSQL中INSERT INTO语句的使用方法,涵盖基本语法、多种插入方式、性能优化及错误处理等内容,重点讲解了单行、多行、部分字段插入以及高级功能如 RETURNING 子句和 ON CONFLICT 冲突处理,并提供了实际示例和最佳实践建议,感兴趣的朋友一起看看吧

一、INSERT INTO 语句概述

PostgreSQL 的 INSERT INTO 语句是数据库操作中最基础且最重要的命令之一,用于向表中添加新记录。该语句支持单行插入、多行插入、部分字段插入等多种灵活用法。

基本语法结构

INSERT INTO table_name (column1, column2, ..., columnN)
VALUES (value1, value2, ..., valueN);

二、语法元素详解

语法部分说明是否可选
INSERT INTO语句开始关键字必选
table_name目标表名称必选
(column1, ...)要插入的字段列表可选
VALUES值关键字必选
(value1, ...)对应字段的值必选

三、插入数据完整示例

1. 创建示例表

CREATE TABLE company(
   id INT PRIMARY KEY NOT NULL,
   name TEXT NOT NULL,
   age INT NOT NULL,
   address CHAR(50),
   salary REAL,
   join_date DATE
);

2. 单行完整插入

INSERT INTO company 
VALUES (1, 'Paul', 32, 'California', 20000.00, '2001-07-13');

3. 指定字段插入(部分字段)

INSERT INTO company (id, name, age, address, join_date)
VALUES (2, 'Allen', 25, 'Texas', '2007-12-13');

4. 使用DEFAULT值插入

INSERT INTO company (id, name, age, address, salary, join_date)
VALUES (3, 'Teddy', 23, 'Norway', 20000.00, DEFAULT);

5. 多行批量插入

INSERT INTO company (id, name, age, address, salary, join_date)
VALUES 
    (4, 'Mark', 25, 'Rich-Mond', 65000.00, '2007-12-13'),
    (5, 'David', 27, 'Texas', 85000.00, '2007-12-13');

四、INSERT操作流程图

五、数据插入架构图

六、高级插入技巧

1. 从查询结果插入

INSERT INTO company_backup
SELECT * FROM company WHERE age > 25;

2. 使用RETURNING子句

INSERT INTO company (id, name, age)
VALUES (6, 'Lisa', 29)
RETURNING id, name;

3. ON CONFLICT处理冲突

INSERT INTO company (id, name, age)
VALUES (1, 'Paul', 33)
ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name, age = EXCLUDED.age;

七、插入性能优化

  1. 批量插入:多行VALUES优于多个单行INSERT
  2. 事务包装:将多个INSERT放入一个事务
  3. 禁用索引:大数据量导入时临时禁用索引
  4. 使用COPY:大数据量使用COPY命令替代INSERT
-- 使用COPY命令导入
COPY company FROM '/path/to/data.csv' DELIMITER ',' CSV;

八、错误处理方案

1. 主键冲突

错误:duplicate key value violates unique constraint
解决:

INSERT INTO company (id, name) 
VALUES (1, 'Paul') 
ON CONFLICT (id) DO NOTHING;

2. 非空约束

错误:null value in column "name" violates not-null constraint
解决:确保必填字段都有值

3. 数据类型不匹配

错误:column "age" is of type integer but expression is of type text
解决:确保值类型与列定义匹配

九、插入结果解析

PostgreSQL返回的插入结果格式:

  • INSERT 0 1:成功插入1行
  • INSERT oid 1:插入单行并返回OID
  • INSERT 0 0:ON CONFLICT DO NOTHING时可能返回

十、最佳实践建议

  1. 明确指定列名:避免表结构变更导致的问题
  2. 参数化查询:防止SQL注入
  3. 批量操作:减少网络往返
  4. 错误处理:总是检查执行结果
  5. 权限控制:只授予必要的INSERT权限

十一、完整示例演示

-- 创建测试表
CREATE TABLE employees (
    emp_id SERIAL PRIMARY KEY,
    emp_name VARCHAR(100) NOT NULL,
    department VARCHAR(50),
    salary NUMERIC(10,2),
    hire_date DATE DEFAULT CURRENT_DATE
);
-- 单行插入
INSERT INTO employees (emp_name, department, salary)
VALUES ('张三', '技术部', 15000.00);
-- 多行插入
INSERT INTO employees (emp_name, department, salary) VALUES
('李四', '市场部', 12000.00),
('王五', '财务部', 18000.00),
('赵六', '技术部', 16000.00);
-- 带返回的插入
INSERT INTO employees (emp_name, department, salary)
VALUES ('钱七', '人事部', 14000.00)
RETURNING emp_id, emp_name;
-- 查询结果
SELECT * FROM employees;

十二、总结

PostgreSQL的INSERT INTO语句提供了灵活多样的数据插入方式,掌握其各种用法和优化技巧对于高效数据库操作至关重要。关键点包括:

  1. 理解基本语法和变体形式
  2. 掌握批量插入提高效率
  3. 学会处理插入冲突
  4. 遵循安全最佳实践
  5. 了解性能优化方法

通过合理应用INSERT语句,可以构建高效可靠的数据写入流程,为应用系统提供坚实的数据存储基础。

到此这篇关于PostgreSQL INSERT INTO 语句完整实例详解的文章就介绍到这了,更多相关PostgreSQL INSERT INTO 语句内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PostgreSQL WHERE 子句的实现示例

    PostgreSQL WHERE 子句的实现示例

    WHERE子句是PostgreSQL中用于过滤数据的核心语法元素,它允许我们指定条件来限制查询返回的行,本文就来详细的介绍一下PostgreSQL WHERE 子句的实现示例,感兴趣的可以了解一下
    2025-11-11
  • PostgreSQL数据库管理系统快速入门

    PostgreSQL数据库管理系统快速入门

    这篇文章主要介绍了PostgreSQL数据库快速入门,PostgreSQL是一个功能强大的开源对象关系型数据库系统,他使用和扩展了SQL语言,并结合了许多安全存储和扩展最复杂数据工作负载的功能,需要的朋友可以参考下
    2023-07-07
  • PostgreSQL修改用户密码的多种方式

    PostgreSQL修改用户密码的多种方式

    在使用PostgreSQL数据库时,忘记数据库密码可能会影响到正常的开发和维护工作,本文将详细给大家介绍了PostgreSQL修改用户密码的多种方式,并有相关的代码示例供大家参考,需要的朋友可以参考下
    2025-05-05
  • PostgreSQL向数据库表中添加行数据的操作

    PostgreSQL向数据库表中添加行数据的操作

    这篇文章主要介绍了PostgreSQL向数据库表中添加行数据的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • PostgreSQL数据库字符串拼接、大小写转换以及substring详解

    PostgreSQL数据库字符串拼接、大小写转换以及substring详解

    在日常工作中会遇到将多行的值拼接为一个值展现,下面这篇文章主要给大家介绍了关于PostgreSQL数据库字符串拼接、大小写转换以及substring的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • PostgreSQL查看正在执行的任务并强制结束的操作方法

    PostgreSQL查看正在执行的任务并强制结束的操作方法

    这篇文章主要介绍了PostgreSQL查看正在执行的任务并强制结束的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Postgresql 跨库同步表及postgres_fdw的用法说明

    Postgresql 跨库同步表及postgres_fdw的用法说明

    这篇文章主要介绍了Postgresql 跨库同步表及postgres_fdw的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • PostgreSQL 数据库性能提升的几个方面

    PostgreSQL 数据库性能提升的几个方面

    PostgreSQL提供了一些帮助提升性能的功能。主要有一些几个方面。
    2009-09-09
  • 使用psql操作PostgreSQL数据库命令详解

    使用psql操作PostgreSQL数据库命令详解

    这篇文章主要为大家介绍了使用psql操作PostgreSQL数据库命令详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • PostgreSQL自定义函数的使用

    PostgreSQL自定义函数的使用

    本文主要介绍了PostgreSQL自定义函数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-06-06

最新评论