news 2026/4/23 0:08:55

数据库的约束简介

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据库的约束简介

约束的简介

数据的完整性是指数据的正确性和一致性,可以通过定义表时定义完整性约束,也可以通过规则,索引,触发器等。约束分为两类:行级和表级,处理机制是一样的。行级约束放在列后,表级约束放在表后,多个列共用的约束放在表后。

完整性约束是一种规则,不占用任何数据库空间。完整性约束存在数据字典中,在执行SQL或PL/SQL期间使用。用户可以指明约束是启用的还是禁用的,当约束启用时,他增强了数据的完整性,否则,则反之,但约束始终存在于数据字典中。

约束类型

总的来说有五种:唯一性和主键约束、外键约束、检查约束、空值约束、默认值约束,

有五大关键词,UNIQUE和Primary Key, Foreign Key, CHECK, NOT NULL, DEFAULT

1。唯一性和主键约束。

要求某一列,或几列不能有重复的值,建立主键约束和唯一约束时,Oralce会基于约束列自动建立唯一索引;主键约束不允许为NULL,唯一约束允许为NULL,一张表只能建立一个主键约束。唯一性和主键约束类似,只是关键词不同而已,语法一致。

创建约束

CREATE TABLE TABLE_NAME
(
COL1 VARCHAR2(32) NOT NULLPRIMARY KEY,
)

CREATE TABLE TABLE_NAME
(
COL1 VARCHAR2(32) NOT NULLCONSTRAINT PK_ID PRIMARY KEY,
)

CREATE TABLE TABLE_NAME
(
COL1 VARCHAR2(32) NOT NULL,
COL2 VARCHAR2(32) NOT NULL Foreign Key,
CONSTRAINT PK_TABLE_NAME PRIMARY KEY(COL1,COL2)
)

修改约束

ALTER TABLE Table_Name
ADD CONSTRAINT PK_Table_Name PRIMARY KEY NONCLUSTERED(Col1)【这里表明了是聚集还是非聚集主键索引】

如果唯一性约束保护多个数据列,那么唯一性约束要作为表约束增加。语法如下:
CONSTRAINT CONSTRAINT_NAME (COL1,COL2) UNIQUE USING INDEX TABLESPACE (TABLESPACE_NAME) STORAGE (STORED CLAUSE)

2。外键约束。

剩下的约束写法都是差不多,这里就不多举例了。

CREATE TABLE TABLE_NAME
(
COL1 VARCHAR2(32) NOT NULLREFERENCES PRIMARY_TABLE(PRIMARY_COL) ON DELETE CASCADE,
)

CREATE TABLE TABLE_NAME
(
COL1 VARCHAR2(32) NOT NULL,
CONSTRAINT FK_TABLE_NAME FOREIGN KEY REFERENCES PRIMARY_TABLE(PRIMARY_COL) ON DELETE SET NULL
)

这里需要注意的是ON 后面的内容。这个是关联的关键。与删除修改密切相关。

  • NO ACTION:更新或删除父表中的数据时,如果会使子表中的外键违反引用完整性,该动作将被禁止执行。
  • CASCADE: 当父表中被引用列的数据被更新或删除时,子表中的相应的数据也被更新或删除。
  • SET NULL:当父表数据被更新或删除时,子表中的相应数据被设置成NULL值,前提是子表中的相应列允许NULL值。
  • SET DEFAULT:当父表数据被更新或删除时,子表中的数据被设置成默认值。前提是子表中的相应列设置有默认值。

3。检查约束。

检查列的类型和范围。语法:CONSTRAINT [constraint_name] CHECK (condition); 比如:check(Age >2)

4。空值约束、5。默认约束

还有两种方式,一种是默认值(default sysdate或者 default 1),

一种是限制空值Not Null【NOT NULL只能在列级定义】,

这也可以看成是约束,它的作用也是进行数据的完整性控制。

修改默认约束:

ALTER TABLE TABLENAME
ADD CONSTRAINT DF_TABLENAME_COL1DEFAUIT('22') FOR COL1


修改空值约束

修改NOT NULL是四个约束当中最特殊的,直接用Modify Col_Name NOT NULL 即可

删除、禁用、启用约束、修改约束名

ALTER TABLE table_name

DROPCONSTRAINT constraint_name(删除约束)

DISABLECONSTRAINT constraint_name;(启用约束)

ENABLECONSTRAINT constraint_name;(禁用约束)ALTER TABLE table_name

RENAMECONSTRAINT old_constraint_nameTOnew_constraint_name(修改约束名)

select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='R';【禁用所有外键约束】

select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints where constraint_type='R';【启用所有外键约束】

select 'alter table '||table_name||' drop constraint '||constraint_name||';' from user_constraints where constraint_type='R';【删除所有外键约束 】

所有约束信息:SELECT * FROM user_constraints

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 0:05:30

【限时解密】Blazor 2026官方成本控制框架(Microsoft Internal Doc #BLZ-COST-2026-R1):首次对外披露的6项受控API与3类禁用模式

第一章:Blazor 2026成本控制框架的演进逻辑与战略定位Blazor 2026成本控制框架并非对既有组件模型的简单功能叠加,而是面向云原生交付生命周期中资源开销、构建时长、运行时内存占用及团队协作摩擦等隐性成本维度所构建的系统性治理范式。其演进逻辑根植…

作者头像 李华
网站建设 2026/4/23 0:03:50

只狼:影逝二度|官方中文 v1.06 完整版|百度网盘 速存

TGA 年度动作神作!独臂忍者,打铁弹反,向死而生! ✅ 资源包含 本体完整内容官方简体中文 界面v1.06 最新升级档解压即玩,无需安装、无需登录适配多数配置,低配置也流畅 ✅ 游戏亮点 极致打铁弹反 战斗&a…

作者头像 李华
网站建设 2026/4/23 0:03:25

深度学习在车险赔付预测中的实战应用

1. 项目概述:用神经网络预测车险赔付金额车险赔付预测是保险行业的核心业务痛点之一。传统精算模型依赖历史数据和统计方法,面对复杂多变的驾驶行为、车辆特征和事故场景时往往表现乏力。三年前我在参与一个车险定价系统重构项目时,发现赔付金…

作者头像 李华
网站建设 2026/4/23 0:02:01

LoRA训练助手惊艳效果:水墨/油画/像素风等艺术媒介术语精准识别

LoRA训练助手惊艳效果:水墨/油画/像素风等艺术媒介术语精准识别 还在为AI绘画训练标签头疼吗?LoRA训练助手让艺术风格描述变得简单精准 1. 核心功能体验:艺术媒介术语的精准捕捉 LoRA训练助手基于强大的Qwen3-32B模型,专门针对艺…

作者头像 李华
网站建设 2026/4/22 23:56:37

企业级应用中的tinykeys实战:从单页面应用到复杂管理系统

企业级应用中的tinykeys实战:从单页面应用到复杂管理系统 【免费下载链接】tinykeys A tiny (~650 B) & modern library for keybindings. 项目地址: https://gitcode.com/gh_mirrors/ti/tinykeys tinykeys是一款轻量级(约400 B)且…

作者头像 李华
网站建设 2026/4/22 23:55:23

PartCrafter应用场景探索:从游戏开发到工业设计的无限可能

PartCrafter应用场景探索:从游戏开发到工业设计的无限可能 【免费下载链接】PartCrafter [NeurIPS 2025] PartCrafter: Structured 3D Mesh Generation via Compositional Latent Diffusion Transformers 项目地址: https://gitcode.com/gh_mirrors/pa/PartCrafte…

作者头像 李华