百科 / SQL 状态码 / Class 23 完整性约束违反
23000 integrity_constraint_violation
完整性约束冲突
ERROR 仅定义 参考 不适用
- 条件名
integrity_constraint_violation- 宏名称
ERRCODE_INTEGRITY_CONSTRAINT_VIOLATION- 最早已知存在
- 7.4
- 状态
- 有效
手册收录:8.1、8.2、8.3、8.4、9.0、9.1、9.2、9.3、9.4、9.5、9.6、10、11、12、13、14、15、16、17、18、19、20。此处仅表示同版本手册收录,运行证据仍以原核验构建为准。
版本覆盖
版本条依据已采样构建显示;灰色版本可能尚未采样,悬停可查看。手册链接随版本选择,源码和运行证据保持原核验构建。
23000 — 完整性约束冲突
速览 {#at-a-glance}
23000 是 Class 23 完整性约束冲突的总类名,不是可以替代具体错误码的自然触发码。客户端应使用服务器返回的完整五字符 SQLSTATE。
含义 {#meaning}
该类包含违反声明完整性规则的行和模式操作。锁定的 errcodes.txt 将具体机制分到 23001、23502、23503、23505、23514、23P01 等子码;18.6 核心调用扫描没有解析出的 23000 报文路径,因此本文不伪造运行复现。
诊断 {#diagnosis}
先读取精确 SQLSTATE,再查看 constraint_name、table_name、column_name、schema_name 以及主报文/DETAIL。把所有 Class 23 错误压成 23000 会丢失修复所需的对象和机制。
处理 {#response}
保留原语句及事务边界,按具体子码修复数据或约束;显式事务报错后先回滚。不要用 RAISE ... ERRCODE 23000 冒充自然服务器机制。
源码报文模板 {#messages}
适用边界 {#case}
本批没有为 23000 构造自然 SQL 触发器;请把它视为源码/协议边界,而不是可直接复制的复现脚本。结构化证据 · 案例导出。
作者证据 ID:identity, specific-codes, handling。选定运行记录:—。
版本与边界 {#versions}
锁定目录在 7.4 已观察到该总类,并在列出的 9.0–18.6 正式快照中均存在。18.6 调用扫描确认了有界源码观察;本文不把它解释为扩展或未来版本都不可能发出该码。
相关 {#related}
参见 23001 RESTRICT 冲突、23502 非空约束冲突、23514 CHECK 冲突、23P01 排除约束冲突 和 23505 唯一约束冲突。
来源 {#sources}
src.errcodes.18.6(SHA-2566e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba)src.calls.REL_18_6(SHA-2569ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf)
来源
证据
断言
每条断言都写明了是怎么核实的,以及它不覆盖什么。这一层是核验时留下的原始英文记录,照原样呈现,未经翻译。
-
23000 is the Class 23 integrity_constraint_violation umbrella condition.
-
PostgreSQL source uses specific descendants such as 23001, 23502, 23503, 23505, 23514, and 23P01 for distinct mechanisms; the exhaustive 18.6 call scan has no resolved 23000 report group.
-
A client should branch on the exact five-character SQLSTATE and use constraint/object fields rather than collapsing every Class 23 error to 23000.
同类 SQL 状态码
| 状态码 | 条件名 | 宏名称 | 严重等级 | 版本 |
|---|---|---|---|---|
| 23000 | integrity_constraint_violation | ERRCODE_INTEGRITY_CONSTRAINT_VIOLATION |
ERROR | 7.4 起已知 |
| 完整性约束冲突的类别码,应使用具体子码。 | 有效 | |||
| 23001 | restrict_violation | ERRCODE_RESTRICT_VIOLATION |
ERROR | 7.4 起已知 |
| 外键 RESTRICT 动作拒绝删除仍被引用的父行。 | 有效 | |||
| 23502 | not_null_violation | ERRCODE_NOT_NULL_VIOLATION |
ERROR | 7.4 起已知 |
| 向 NOT NULL 列写入了 NULL 值。 | 有效 | |||
| 23503 | foreign_key_violation | ERRCODE_FOREIGN_KEY_VIOLATION |
ERROR | 7.4 起已知 |
| 外键约束冲突,子行找不到匹配的父键。 | 有效 | |||
| 23505 | unique_violation | ERRCODE_UNIQUE_VIOLATION |
ERROR | 7.4 起已知 |
| 行或索引违反唯一约束,常见于重复键插入。 | 有效 | |||
| 23514 | check_violation | ERRCODE_CHECK_VIOLATION |
ERROR | 7.4 起已知 |
| CHECK 约束计算为假,写入的行不满足条件。 | 有效 | |||
| 23P01 | exclusion_violation | ERRCODE_EXCLUSION_VIOLATION |
ERROR | 9.0.0 起已知 |
| 排除约束发现新行与已有行冲突,如范围重叠。 | 有效 | |||