sql完整性约束有哪些:五类约束实操用法
sql完整性约束有实体、域、参照、自定义、主键衍生约束五大核心类型,分别用于管控数据表行唯一、字段取值、表间关联、业务规则、主键拓展校验,是数据库保障数据准确、一致、有效的核心规则,其中实体、域、参照约束为SQL标准基础约束,剩余两类为业务场景补充约束,适用于MySQL、Oracle、SQLServer主流关系型数据库,仅部分语法在小众数据库中存在细微适配差异。
实体完整性约束
实体完整性约束针对数据表单行数据,核心作用是确保每一条数据都是唯一、可识别的有效实体,杜绝重复、无标识数据。该约束主要通过主键约束实现,主键字段必须同时满足非空、唯一两个条件,一张数据表仅能设置一个主键,可选择单字段主键或多字段联合主键。自增主键是实操中常用形式,能自动生成唯一标识,大幅降低人工录入出错概率,删除或修改主键数据时,会触发数据库校验机制,避免实体标识混乱。
域完整性约束
域完整性约束管控数据表字段的取值范围与格式,保证同一字段所有数据符合统一规范,规避无效、异常数据录入。常用实现方式包含非空约束、唯一约束、默认值约束、数据类型约束、检查约束,非空约束禁止字段为空值,唯一约束保障字段数据不重复,默认值约束可在无录入内容时自动填充预设值,检查约束能自定义取值规则。在MySQL8.0及以上版本中,检查约束可稳定生效,精准限制数值大小、字符串长度等字段规则。
参照完整性约束
参照完整性约束用于维护多张关联数据表之间的数据一致性,核心是管控外键与主键的关联关系,避免出现关联数据断裂、无效匹配的问题。外键字段需要匹配另一张表的主键数据,新增、修改、删除数据时,会遵循关联规则校验,常见规则包含级联更新、级联删除、禁止操作、置空操作。该约束仅适用于存在主从关联的业务表,独立单表无需配置,过度使用会小幅降低数据库读写性能。
用户自定义完整性约束
用户自定义完整性约束是贴合实际业务场景的个性化校验规则,用来弥补标准约束无法覆盖的业务专属数据规范,适配不同行业、不同项目的特殊数据校验需求。你可以通过存储过程、触发器、自定义检查规则实现该约束,比如设置用户年龄必须大于16岁、订单金额不能为负数、手机号固定11位数字等个性化规则。这类约束无统一标准语法,完全根据业务逻辑定制,灵活度极高。
适配专属业务场景。
主键衍生完整性约束
主键衍生完整性约束是基于主键规则延伸的补充约束,主要包含候选键约束和备用主键约束,候选键是数据表中满足唯一、非空条件,但未被设为主键的字段,可作为主键备用标识,保障数据标识体系冗余可靠。该约束不强制配置,属于数据库优化层面的完整性配置,多用于金融、政务等对数据唯一性、可追溯性要求较高的场景。
| 约束类型 | 管控维度 | 核心作用 | 适用场景 |
|---|---|---|---|
| 实体完整性 | 数据行 | 保证单行数据唯一可识别 | 所有数据表基础配置 |
| 域完整性 | 数据字段 | 规范字段取值格式与范围 | 统一字段数据录入标准 |
| 参照完整性 | 表间关联 | 维持多表数据关联一致性 | 主从关联数据表 |
| 自定义完整性 | 业务规则 | 适配个性化业务数据校验 | 存在特殊数据规范的业务表 |
| 主键衍生完整性 | 主键冗余 | 完善数据标识追溯体系 | 高严谨性数据存储场景 |
参照完整性约束在临时测试数据表中不建议配置,频繁增删改测试数据时,外键校验会触发报错,大幅降低测试效率,这是该约束最明确的适用边界。
