【postgresql 基础入门】插入数据的多种方式 单条,多值,查询结果,插入数据冲突处理,批量导入,多种方式让数据插入更灵活

本文主要是介绍【postgresql 基础入门】插入数据的多种方式 单条,多值,查询结果,插入数据冲突处理,批量导入,多种方式让数据插入更灵活,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

添加表数据

专栏内容

  • postgresql内核源码分析
  • 手写数据库toadb
  • 并发编程

开源贡献

  • toadb开源库

个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

系列文章

  • 入门准备
  • postgrersql基础架构
  • 快速使用
  • 初始化集群
  • 数据库服务管理
  • psql客户端使用
  • pgAdmin图形化客户端
  • 数据库的使用
  • 创建数据库
  • 数据库操作
  • 表的使用
  • 表的创建
  • 表的操作
  • 数据查询
  • 数据查询
  • 多表联合查询
  • 数据操作
  • 插入数据的方式

文章目录

  • 添加表数据
  • 系列文章
  • 前言
  • 概述
  • 单条插入 (Single Insert)
  • 多条插入(Multiple Insert)
  • 带冲突处理(Conflict Handling)
    • DO NOTHING
    • DO UPDATE
  • 将查询结果插入表中
  • 批量导入 (Bulk Insert):
  • 总结
  • 结尾

前言

postgresql 数据库是一款通用的关系型数据,在开源数据库中能与商业数据媲美,在业界也越来越流行。

因为是开源数据库,不仅公开源码,还有很多使用案例,好用的插件,所以它的慢慢变成了数据库的先驱和标准,通过postgresql可以很好从使用到原理,彻底搞懂;

如果是学习编程,也可以学到丰富的编程知识,数据结构,编程技巧,它里面还有很多精妙的架构设计,分层思想,可以灵活定制的思想。

本专栏主要介绍postgresql 入门使用,数据库维护管理,通过这些使用来了解数据库原理,慢慢了解postgresql是什么样的数据库,能做那些事情,以及如何做好服务,最关键的是这些知识都是面试的必备项。

概述

通过前几篇文文章,我们了解了postgresql 的服务启停,数据表的管理,接下来就是给我们创建的表添加数据,进行真正的使用了。

数据库表添加数据通常使用insert语句,可以进行单条数据的插入,也可以进行多value的插入,还可以写到sql脚本中进行批量插入;当然,也可以将查询结果存入一张表中;

下面我们就来一起看看各种方法的使用。

单条插入 (Single Insert)

常用的插入语句就是insert into 往某张表中插入一条数据,它的语法形式如下:

INSERT INTO table_name (column1, column2, column3)
VALUES (value1, value2, value3);

假设有一个名为"users"的表,具有"id"、"name"和"age"三个列,你可以使用以下语句将一条新记录插入到表中:

INSERT INTO users (id, name, age)
VALUES (1, 'John Doe', 25);

这将向"users"表插入一条新的记录。

多条插入(Multiple Insert)

如果有多条数据,我们可以在一条insert into 语句中一次性插入到某张表中,它的语法形式如下:

INSERT INTO table_name (column1, column2, column3)
VALUES (value1, value2, value3),(value4, value5, value6),(value7, value8, value9);

你可以一次插入多条记录到表中。在上面的示例中,将同时插入三条记录到"users"表中。

INSERT INTO users (id, name, age) 
VALUES (2, 'White', 27),  (3, 'Greenly', 33), (4, 'James', 20);

在使用 insert into 时,当我们对表中的每个字段都有值对应时,可以只指定表名即可,不用列出所有的列名;

INSERT INTO users  
VALUES (2, 'White', 27), (3, 'Greenly', 33, (4, 'James', 20);

带冲突处理(Conflict Handling)

在插入数据时,可能会遇到冲突,例如插入重复的唯一索引或主键值。 PostgreSQL提供了ON CONFLICT子句来处理冲突。

可以有以下选项:

  • DO NOTHING 当冲突发生时,什么都不做,也就不插入数据;
  • DO UPDATE 当冲突发生时,执行update操作,更新冲突列以外的列的值;

DO NOTHING

INSERT INTO users (id, name, age)
VALUES (1, 'John Doe', 25)
ON CONFLICT (id) DO NOTHING;

如果"id"列的值已经存在于"users"表中,将不执行任何操作。

DO UPDATE

INSERT INTO users (id, name, age)
VALUES (1, 'John Doe', 25)
ON CONFLICT (id) DO UPDATE;

你可以根据自己的需求,选择使用DO NOTHINGDO UPDATE或其他操作来处理冲突。

ON CONFLICT DO UPDATE保证一个原子的 INSERT或者 UPDATE结果。在没有无关错误的前提下,这两种 结果之一可以得到保证,即使在很高的并发度也能保证。这也可以被称作 UPSERT — “UPDATE 或 INSERT”。

需要注意的是,DO UPDATE不能在分区表上使用,因为update后,所有在分区有可能会发生变化;

当然还可以带条件选择进行DO UPDATE, 也就是条件满足时,update动作;

postgres=# INSERT INTO users (id, name, age)
VALUES (1, 'John Doe', 10)
ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name WHERE users.age < 18;
INSERT 0 0

当 age小于18岁时,我们才会更新名字,大于等于18的会选择忽略;

这时会用EXLUDED 来引用要插入的数据,类似一个虚拟的表,而通过原表名引用当前表中已经存在的数据,如上例中,当前表中的age < 18时,才会将name 字段更新为 新值,用excluded字段引用,这里看到更新条数为0,因为表中的age是25;

将查询结果插入表中

表数据的来源,还可以是SQL的查询结果, 通过 INSERT INTO ... SELECT 语法,将查询的结果插入表中。

postgres=# create table user_A(id int primary key, name varchar, order_date date, total_amount numeric(10,2));
CREATE TABLEpostgres=# insert into user_A(id,name,order_date,total_amount) select c.customer_id, c.customer_name, o.order_date, o.total_amount from orders o, products p, customers c where o.customer_id = c.customer_id and o.order_id = p.product_id and total_amount > 100;
INSERT 0 2

新创建一张表user_A, 然后使用我们前面分享的关联查询的方法,从三张表中查到消费总计超过100的消费者信息,记录到user_A中,这样就将优质客户信息单独记录到一张表中。

批量导入 (Bulk Insert):

如果你需要批量导入大量数据,可以使用COPY命令,它可以将一个文件的格式化的数据批量导入一张表中。

COPY table_name (column1, column2, column3) FROM '/path/to/data.csv' CSV;

这个命令将从指定的CSV文件路径将数据导入到表中,你需要确保CSV文件的列与表的列相匹配,文件中各字段值间的分隔符必须是相同的,每行数据占一行;

总结

通过本文的分享,了解了数据表中如何添加数据,有单条直接插入,这也是常用的SQL,还有多个值同时插入,以及插入时的冲突处理,此外还有将带条件查询结果插入表中,批量插入等高级用法。

结尾

非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

注:未经同意,不得转载!

这篇关于【postgresql 基础入门】插入数据的多种方式 单条,多值,查询结果,插入数据冲突处理,批量导入,多种方式让数据插入更灵活的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/164466

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了