当前位置: 首页 > article >正文

不用装软件!这款MicroPython浏览器 IDE :让你在手机上也能调试树莓派 Pico毡

1、普通的insert into如果主键/唯一建存在则会报错新需求就算冲突也不报错用其他处理逻辑回到顶部2、基本语法INSERT INTO ... ON CONFLICT (...) DO (UPDATE SET ...)/(NOTHING)语法图“保留旧数据静默跳过”“用新数据替换或修改旧数据”“是只更新部分字段”“是需满足条件才更新”“否全量覆盖”开始: INSERT发生主键/唯一冲突冲突后的期望是?使用 ON CONFLICT DO NOTHING使用 ON CONFLICT DO UPDATE SET需要精细控制吗?在SET中仅指定目标字段添加WHERE子句使用EXCLUDED.*或指定所有字段?? 两种核心处理逻辑为了方便你对比和理解我将它们总结在下表中处理逻辑 关键字 核心行为与目的 类比1. 静默放弃 DO NOTHING 如果冲突数据已存在就什么也不做静默地保留现有数据并让语句成功结束。 “无视”看到店里已有同样的商品就决定不放了直接离开。2. 更新覆盖 DO UPDATE SET ... 如果冲突数据已存在就用新值更新已有的那条记录。 “置换”看到店里已有同样的商品就用你手里的新款替换掉旧款。语法1DO UPDATE SETINSERT INTO 表名 (列1, 列2, ...)VALUES (值1, 值2, ...)ON CONFLICT (冲突列[可以多个])DO UPDATE SET列1 EXCLUDED.列1,列2 EXCLUDED.列2,...;语法2DO NOTHINGINSERT INTO table_name (column1, column2, ...)VALUES (value1, value2, ...)ON CONFLICT (冲突列[可以多个])DO NOTHING;回到顶部3、示例3.1、简单示例-- 示例1: DO NOTHING - 确保数据唯一重复则忽略-- 场景收集用户邮箱同一邮箱只记录第一次出现INSERT INTO user_emails (email, collected_at, source)VALUES (aliceexample.com, NOW(), 官网抽奖)ON CONFLICT (email)DO NOTHING; -- 如果邮箱已存在则静默跳过不报错-- 示例2: DO UPDATE SET - 用最新信息覆盖旧记录-- 场景更新用户的最后登录状态INSERT INTO user_sessions (user_id, last_login_ip, last_login_time, login_count)VALUES (123, 192.168.1.100, NOW(), 1)ON CONFLICT (user_id)DO UPDATE SETlast_login_ip EXCLUDED.last_login_ip, -- 使用本次尝试插入的新IPlast_login_time EXCLUDED.last_login_time, -- 更新时间login_count user_sessions.login_count 1; -- 在原有次数上累加3.2、ON CONFLICT 多列组合唯一约束示例场景说明假设我们有一个学生选课记录表设计逻辑是单个学生可以选多门课单门课程可以被多个学生选但 一个学生不能重复选同一门课即 (student_id, course_id) 组合必须唯一示例表结构CREATE TABLE student_courses (-- 自增主键但不是业务唯一键id SERIAL PRIMARY KEY,student_id INT NOT NULL,course_id INT NOT NULL,selected_at TIMESTAMP DEFAULT NOW(),status VARCHAR(20) DEFAULT active,-- 关键为(student_id, course_id)创建组合唯一约束CONSTRAINT unique_student_course UNIQUE (student_id, course_id));示例数据假设表中已有数据id student_id course_id selected_at status1 1001 101 2024-01-01 active2 1001 102 2024-01-02 active3 1002 101 2024-01-03 active场景1尝试重复选课 → 使用 DO NOTHING学生1001想再次选择课程101已存在我们静默拒绝INSERT INTO student_courses (student_id, course_id, selected_at)VALUES (1001, 101, NOW()) -- (1001,101)组合已存在ON CONFLICT (student_id, course_id) -- 指定两列组合为冲突目标DO NOTHING; -- 什么都不做防止重复选课-- 结果语句执行成功但没有插入新行-- 表数据保持不变场景2尝试重复选课 → 使用 DO UPDATE SET学生1001重复选课101但我们允许更新选择时间和状态INSERT INTO student_courses (student_id, course_id, selected_at, status)VALUES (1001, 101, NOW(), renewed) -- 再次尝试选择已选课程ON CONFLICT (student_id, course_id) -- 检测(student_id, course_id)组合冲突DO UPDATE SETselected_at EXCLUDED.selected_at, -- 更新时间戳status EXCLUDED.status, -- 更新状态id student_courses.id -- 保持原id不变避免主键冲突RETURNING *; -- 返回更新后的行-- 结果不会创建新行而是更新id1的记录-- 将selected_at更新为当前时间status更新为renewed场景3混合情况处理批量插入选课记录处理各种冲突情况INSERT INTO student_courses (student_id, course_id, selected_at)VALUES(1001, 103, NOW()), -- 新组合插入成功(1001, 101, NOW()), -- 已存在组合触发ON CONFLICT(1002, 102, NOW()) -- 新组合插入成功ON CONFLICT (student_id, course_id)DO UPDATE SETselected_at EXCLUDED.selected_at,status refreshedRETURNING student_id, course_id, selected_at;输出结果可能student_id | course_id | selected_at------------------------------------------------1001 | 103 | 2024-06-15 10:30:00.000 -- 新插入1001 | 101 | 2024-06-15 10:30:00.000 -- 更新冲突处理1002 | 102 | 2024-06-15 10:30:00.000 -- 新插入3.3、其他多列唯一约束示例示例1会议室预订系统-- 确保同一会议室在同一时间段不被重复预订-- 唯一约束(room_id, date, time_slot)INSERT INTO room_bookings (room_id, date, time_slot, booker_name)VALUES (101, 2024-06-20, 09:00-10:00, 张三)ON CONFLICT (room_id, date, time_slot)DO NOTHING; -- 时间段冲突则直接拒绝示例2用户-产品评分表-- 确保一个用户对同一产品只能评分一次-- 唯一约束(user_id, product_id)INSERT INTO product_ratings (user_id, product_id, rating, review)VALUES (5001, 3005, 5, 非常好用)ON CONFLICT (user_id, product_id)DO UPDATE SETrating EXCLUDED.rating,review EXCLUDED.review,rated_at NOW();关键要点总结语法格式ON CONFLICT (column1, column2, ...) 用括号包含多个列约束要求这些列必须已定义组合唯一约束可以是复合主键或复合唯一约束冲突检测只有当所有指定列的值都完全匹配时才被认为是冲突常见场景多对多关系表、时间-资源组合、用户-实体关联表等这种多列约束特别适合处理业务层面的组合唯一性要求而不仅仅是技术上的主键唯一性。回到顶部4、特殊参数解析冲突列[可以多个]ON CONFLICT 后面必须指定一个唯一约束主键也可以字段多个字段唯一也可以关键机制冲突目标ON CONFLICT 后面必须指定一个唯一约束通常是主键或唯一索引。当插入的数据在这个约束上与已有数据冲突时就会触发 UPDATE 操作。约束要求这些列必须已定义组合唯一约束可以是复合主键或复合唯一约束EXCLUDED 伪表在 DO UPDATE SET 子句中你可以使用 EXCLUDED.列名 来引用本次尝试插入但发生了冲突的那些值这是实现“用新值覆盖旧值”的关键。痴逝哑捣

相关文章:

不用装软件!这款MicroPython浏览器 IDE :让你在手机上也能调试树莓派 Pico毡

1、普通的insert into 如果(主键/唯一建)存在,则会报错 新需求:就算冲突也不报错,用其他处理逻辑 回到顶部 2、基本语法(INSERT INTO ... ON CONFLICT (...) DO (UPDATE SET ...)/(NOTHING)) 语…...

轴承二维与三维有限元模型及其ANSYS仿真计算准备:轻松上手学习资源

轴承(二维圆柱和二维球模型)和三维深沟球有限元模型画好网格,可直接拿去ansys仿真计算,适合小白学习上手较快。 以上都是博主学习过程中的一部分成果,保证真实有效。 可以看到轴承的动态受力图。 另外,资料…...

HexStrike-AI:从合法红队工具到黑客利器

HexStrike-AI原本是网络安全研究员Muhammad Osama开发的合法红队工具,可集成AI代理,自主运行150多种网络安全工具,实现自动化渗透测试与漏洞发现。 开发者描述:“HexStrike-AI通过MCP(管理控制协议)与外部…...

3个实用功能:Free-NTFS-for-Mac让你的Mac完整支持NTFS读写

3个实用功能:Free-NTFS-for-Mac让你的Mac完整支持NTFS读写 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and managemen…...

聊一聊 C# 中的闭包陷阱:foreach 循环的坑你还记得吗?乇

. GIF文件结构 相比于 WAV 文件的简单粗暴,GIF 的结构要精密得多,因为它天生是为了网络传输而设计的(包含了压缩机制)。 当我们用二进制视角观察 GIF 时,它是由一个个 数据块(Block) 组成的&…...

TP-Link 多款路由器曝未修复零日漏洞:栈溢出可致远程代码执行,其他漏洞已被实际利用

目前,TP-Link 已确认多款路由器型号存在尚未修复的零日漏洞,同时该品牌其他漏洞已被真实网络攻击利用。 Amazon.com: TP-Link Archer AX10 AX1500 WiFi 6 Router Dual Band 1.5GHz Tri Core CPU TPLink : Electronics 零日漏洞详情与厂商响应 该零日漏…...

WarcraftHelper:三步解决魔兽争霸III在现代电脑上的兼容性问题

WarcraftHelper:三步解决魔兽争霸III在现代电脑上的兼容性问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典魔兽争霸III在现…...

RI-CLPM模型中的协变量控制:显变量水平 vs 随机截距水平(Mplus语法详解)

RI-CLPM模型中协变量控制的策略选择:显变量水平与随机截距水平的深度对比 在纵向数据分析领域,随机截距交叉滞后模型(RI-CLPM)因其能够区分个体间差异和个体内变化而广受欢迎。然而,当研究者需要在模型中纳入协变量时,往往会面临…...

Hexo Admin实战指南:打造高效本地Markdown博客管理后台

1. 为什么你需要Hexo Admin? 如果你正在使用Hexo搭建静态博客,肯定遇到过这样的烦恼:每次写新文章都要打开终端,输入hexo new post "文章标题",然后在生成的Markdown文件里手动编辑。这种操作不仅繁琐&…...

看Anything V5如何玩转AI绘画:从简单描述到复杂场景的生成效果案例

看Anything V5如何玩转AI绘画:从简单描述到复杂场景的生成效果案例 如果你对AI绘画感兴趣,一定听说过Stable Diffusion。而Anything V5,就是基于这个强大框架的一个特别版本,它在动漫、二次元风格的图像生成上表现尤为出色。今天…...

YOLO11实例分割教程:快速掌握数据标注、格式转换与模型训练

YOLO11实例分割教程:快速掌握数据标注、格式转换与模型训练 1. 准备工作与环境搭建 1.1 获取YOLO11镜像 YOLO11镜像提供了完整的计算机视觉开发环境,包含预装好的所有依赖项。您可以通过以下两种方式使用: Jupyter Notebook方式&#xff1…...

MT4跟单系统高频交易优化:如何用Pumping模式降低服务器负载50%

MT4跟单系统高频交易优化:Pumping模式实战解析与性能提升方案 外汇交易市场瞬息万变,对于专业交易团队而言,毫秒级的延迟可能意味着巨大的利润差异。在MT4跟单系统中,传统轮询方式在高频交易场景下往往成为性能瓶颈,导…...

从LED闪烁到继电器驱动:手把手用Arduino玩转NPN/PNP三极管开关电路(附代码)

从LED闪烁到继电器驱动:手把手用Arduino玩转NPN/PNP三极管开关电路(附代码) 在创客项目和物联网设备开发中,我们常常会遇到单片机IO口驱动能力不足的问题。比如当你想要控制一个高功率LED、蜂鸣器或者继电器时,Arduino…...

深度学习图像拼接新突破:USID++如何实现无监督大视差场景下的精准对齐

1. 为什么传统图像拼接技术会翻车? 想象一下你正在用手机拍摄一张全景照片,从左往右缓慢移动镜头。当你把两张照片拼在一起时,近处的树木和远处的山峦经常会出现"鬼影"或错位——这就是典型的视差问题。传统图像拼接方法在这个场景…...

双目视觉测量系统在工业检测中的精度优化策略与实践

1. 双目视觉测量系统在工业检测中的核心价值 在工业质检领域,毫米级的精度差异可能直接决定产品合格率。去年我们团队为某汽车零部件厂部署检测系统时,就遇到过螺栓螺纹检测误判的难题——传统单目相机总是把0.2mm的螺纹瑕疵漏检。换成双目系统后&#x…...

Win11 Docker Desktop 迁移虚拟硬盘文件存储位置

一、wsl虚拟硬盘文件路径 C:\Users\admin\AppData\Local\Docker\wsl C:\Users\admin\AppData\Local\Docker\wsl\disk\docker_data.vhdx C:\Users\admin\AppData\Local\Docker\wsl\main\ext4.vhdx 二、新建新的磁盘映像位置 E:\wsl2(选择这个) E:\ws…...

Sollumz:3步在Blender中制作GTA V游戏模组的完整指南

Sollumz:3步在Blender中制作GTA V游戏模组的完整指南 【免费下载链接】Sollumz Grand Theft Auto V modding suite for Blender. This add-on allows the creation of modded game assets: 3D models, maps, interiors, animations, etc. 项目地址: https://gitco…...

商务本也能跑AI!手把手教你用Ollama+Chatbox在ThinkPad上免费部署DeepSeek-R1

商务本也能跑AI!手把手教你用OllamaChatbox在ThinkPad上免费部署DeepSeek-R1 当大多数人还在为运行AI模型需要高端显卡发愁时,你可能不知道,手边的商务笔记本就能开启本地AI之旅。作为一名常年与ThinkPad X1 Carbon为伴的技术顾问&#xff0c…...

SD卡接口PCB设计实战:从引脚定义到高速信号完整性布局布线

1. SD卡接口基础:从物理结构到引脚定义 第一次接触SD卡接口设计时,我对着那排密密麻麻的引脚直发懵。后来才发现,理解SD卡物理结构是PCB设计的第一步。常见的SD卡有标准SD、microSD(TF卡)和miniSD三种规格,…...

抖音无水印下载器终极指南:三步快速获取高清内容的完整教程

抖音无水印下载器终极指南:三步快速获取高清内容的完整教程 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback …...

逆向思维看保护:我是如何用VMProtect SDK给自己的工具软件“上锁”,并防止被破解的?

逆向思维构建软件护城河:VMProtect SDK实战防御手册 当我在深夜调试自己开发的工具软件时,突然冒出一个念头:如果我是黑客,会如何破解这个软件?这个看似简单的自问,彻底改变了我对软件保护的认知方式。传统…...

【华为电脑管家】多屏协同下微软拼音输入法兼容性自动修复的终极指南

1. 多屏协同与输入法兼容性问题解析 华为电脑管家的多屏协同功能确实让跨设备办公变得无比便捷,但很多用户都遇到过这个烦人的问题:每次连接多屏协同时,微软拼音输入法的兼容性设置就会被自动修改。我自己也深受其扰,经常在重要会…...

BAAI/bge-m3实战:快速构建个人知识库与智能问答助手

BAAI/bge-m3实战:快速构建个人知识库与智能问答助手 1. 项目概述与核心价值 BAAI/bge-m3是北京智源研究院推出的开源语义嵌入模型,在MTEB(Massive Text Embedding Benchmark)榜单上表现优异。这个多语言通用嵌入模型能够将文本转…...

全球AI监管格局:合规将成为企业AI落地的核心门槛

全球AI监管现状欧盟《人工智能法案》将AI系统分为四类风险等级,禁止不可接受风险类AI(如社会评分系统),高风险类AI需满足严格合规要求(如医疗设备)。违规罚款可达全球营业额6%。美国采取分行业监管模式&…...

AI算力行业深度报告:供需格局、技术演进与投资机会

AI算力行业概述AI算力指支撑人工智能模型训练和推理所需的计算资源,核心包括芯片、服务器、数据中心等硬件设施。随着大模型技术爆发,全球算力需求呈现指数级增长,预计2030年市场规模将突破万亿美元。供需格局分析供给端芯片领域:…...

从通用到垂直:行业大模型将成为企业数字化转型的核心抓手

行业大模型的崛起背景数字化转型进入深水区,企业对AI的需求从通用场景转向垂直领域。通用大模型在特定行业中面临数据敏感性、专业知识不足、成本过高等问题,催生了行业大模型的快速发展。行业大模型的差异化优势精准性:针对行业数据训练&…...

低空经济“充电网”:原理、场景与未来布局全解析

低空经济“充电网”:原理、场景与未来布局全解析 引言:为什么说“充电桩”是低空经济的“加油站”? [外链图片转存中…(img-5rpT3Icb-1775923220357)] 随着无人机与eVTOL(电动垂直起降飞行器)从“玩具”和“概念”走向…...

Sollumz:在Blender中打造专业级GTA V游戏资产的终极指南 [特殊字符]

Sollumz:在Blender中打造专业级GTA V游戏资产的终极指南 🎮 【免费下载链接】Sollumz Grand Theft Auto V modding suite for Blender. This add-on allows the creation of modded game assets: 3D models, maps, interiors, animations, etc. 项目地…...

Input Leap架构深度解析:跨平台KVM软件的技术实现与多设备输入协同

Input Leap架构深度解析:跨平台KVM软件的技术实现与多设备输入协同 【免费下载链接】input-leap Open-source KVM software 项目地址: https://gitcode.com/gh_mirrors/in/input-leap 在现代多设备办公环境中,Input Leap作为一款开源的KVM&#x…...

高效实现分组内跨行时间戳匹配:构建 user_rejects 布尔标识列

本文介绍如何在大规模数据集(百万级行、每组15–25行)中,基于 application_id 分组,高效判断每行的 rejected_time 是否等于同组内任意其他行的 selected_time,并生成整数型布尔列 user_rejects。 本文介绍如何在…...