在SQL中,约束(Constraints) 是作用于数据库表字段上的规则,用于强制保证数据的完整性、准确性和一致性。当插入、更新或删除数据时,约束会自动验证操作是否符合规则,若违反则拒绝执行。

以下是SQL中常见的约束类型及其作用:


📌 1. PRIMARY KEY(主键约束)

  • 作用:唯一标识表中的每一条记录(类似身份证号)。
  • 特点
    • 唯一性:值不可重复。
    • 非空性:值不可为 NULL
    • 一个表只能有一个主键(可由单列或多列组合)。
CREATE TABLE Users (id INT PRIMARY KEY,  -- 单列主键name VARCHAR(50)
);-- 多列组合主键
CREATE TABLE Orders (order_id INT,product_id INT,PRIMARY KEY (order_id, product_id)
);

📌 2. FOREIGN KEY(外键约束)

  • 作用:确保表间数据关联的完整性(如订单必须属于存在的用户)。
  • 特点
    • 指向另一张表的主键唯一键
    • 可定义级联操作(如 ON DELETE CASCADE:主表删除时,自动删除从表关联数据)。
CREATE TABLE Orders (order_id INT PRIMARY KEY,user_id INT,-- 关联Users表的主键idFOREIGN KEY (user_id) REFERENCES Users(id)ON DELETE CASCADE  -- 用户删除时,其订单自动删除
);

📌 3. UNIQUE(唯一约束)

  • 作用:确保字段值在表内唯一(允许空值)。
  • 特点
    • 一个表可有多个唯一约束。
    • 与主键区别:允许 NULL(主键不允许)。
CREATE TABLE Employees (id INT PRIMARY KEY,email VARCHAR(100) UNIQUE  -- 邮箱必须唯一
);

📌 4. NOT NULL(非空约束)

  • 作用:强制字段不允许存入 NULL 值(必须提供有效数据)。
  • 常见场景:关键字段如姓名、订单号等。
CREATE TABLE Products (id INT PRIMARY KEY,name VARCHAR(50) NOT NULL  -- 产品名不能为空
);

📌 5. CHECK(检查约束)

  • 作用:自定义条件校验字段值(如年龄范围、数值正负)。
CREATE TABLE Students (id INT PRIMARY KEY,age INT CHECK (age >= 18),  -- 年龄必须≥18grade CHAR(1) CHECK (grade IN ('A','B','C'))  -- 等级只能是A,B,C
);

📌 6. DEFAULT(默认值约束)

  • 作用:当插入数据未指定字段值时,自动填充预设值。
CREATE TABLE Orders (id INT PRIMARY KEY,order_date DATE DEFAULT CURRENT_DATE  -- 未指定日期时自动用当前日期
);

⚠️ 约束的注意事项

  1. 命名约束:显式命名便于维护(否则数据库自动生成随机名)。
    CREATE TABLE Users (id INT,CONSTRAINT pk_users PRIMARY KEY (id)  -- 命名主键约束
    );
    
  2. 修改约束:可通过 ALTER TABLE 增删约束。
    ALTER TABLE Employees ADD CONSTRAINT chk_salary CHECK (salary > 0);
    ALTER TABLE Employees DROP CONSTRAINT chk_salary;
    
  3. 性能影响:外键和唯一约束会自动创建索引,可能影响写入速度,但提升查询效率。

💡 应用场景示例

约束类型实际应用场景
PRIMARY KEY用户ID、订单号等唯一标识字段
FOREIGN KEY订单关联用户ID、评论关联文章ID
UNIQUE用户邮箱、手机号等不可重复的业务字段
NOT NULL必填项(如用户名、创建时间)
CHECK价格≥0、性别只能是’M’或’F’等逻辑校验
DEFAULT自动填充创建时间、状态默认值

合理使用约束可避免脏数据(如无效外键、重复订单号),是数据库设计的核心环节!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92806.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92806.shtml
英文地址,请注明出处:http://en.pswp.cn/web/92806.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot-vue 地图展现

在很多社区管理系统中,地图展示功能是一个重要的模块,它能直观地呈现小区的地理位置分布。本文将详细梳理从前端触发请求到地图上展示小区数据的完整流程,帮助大家理解前后端协同工作的具体细节。一、前端触发:页面加载与地图初始…

Vue 3 登录组件

Login.vue 组件详细分析整体架构 Vue 3 登录组件&#xff0c;采用 Composition API Element Plus UI 库&#xff0c;实现了完整的用户认证界面。 模板结构分析 1. 容器布局 <div class"login-container"><el-card class"login-card"><!-- …

小结: getSpringFactoriesInstances从 `spring.factories` 文件中加载和实例化指定类型的类

getSpringFactoriesInstances 方法工作原理 getSpringFactoriesInstances 是 Spring Boot 框架中的一个核心方法&#xff0c;用于从 spring.factories 文件中加载和实例化指定类型的类。这是 Spring Boot 实现自动配置和插件化扩展的关键机制。 1. 基本功能 该方法的主要作用是…

selenium SessionNotCreatedException问题解决办法

在上周有一台服务器重启之后&#xff0c;Chrome浏览器也自动升了级&#xff0c;原本能够正常使用的自动化办公程序突然没法用了&#xff0c;出现了下面的报错提示。codes/addCancelBdld.py:980: DeprecationWarning: use options instead of chrome_optionsdriver webdriver.C…

SOAP HTTP Binding

SOAP HTTP Binding 引言 SOAP(Simple Object Access Protocol)是一种轻量级、简单的协议,用于在网络上交换结构化信息。它广泛应用于Web服务中,用于实现不同系统和应用程序之间的通信。SOAP HTTP Binding是SOAP协议的一种实现方式,它允许使用HTTP协议来传输SOAP消息。本…

GPT-5免费使用教程(国内可访问)

GPT-5来了&#xff0c;压力给到各大AI模型厂商&#xff1f; 北京时间2025年8月7日&#xff0c;OpenAI 推出两款开源模型 gpt-oss-120b / 20b&#xff0c;性能逼近 o4-mini/o3-mini&#xff0c;一时间火爆AI圈&#xff1b;但这好像只是一道开胃小菜&#xff0c;在北京时间2025年…

内存作假常见方案可行性分析

内存作假通常修改所涉及到的几个文件&#xff1a;M sys/frameworks/base/core/java/android/app/ActivityManager.javaM sys/frameworks/base/core/jni/android_os_Debug.cppM sys/frameworks/base/core/jni/android_util_Process.cppM sys/frameworks/base/services/core/java…

C#(vs2015)利用unity实现弯管机仿真

以下是基于 Visual Studio 2015 和 Unity 实现弯管机仿真的完整技术流程&#xff0c;结合工业仿真开发的最佳实践整理而成&#xff0c;涵盖建模、通信、运动控制和交互逻辑等核心模块&#xff1a;---一、环境配置与基础框架搭建 1. Unity 与 VS2015 联动 - 安装 [Visual Studio…

华为USG防火墙双机,但ISP只给了1个IP, 怎么办?

华为USG防火墙双机&#xff0c;但ISP只给了1个IP&#xff0c; 怎么办&#xff1f; 华为USG双机使用VRRP&#xff0c;需要3个Ip 本次联通只给了 100.1.1.0/30 这一个互联段 联通侧用了100.1.1.1&#xff0c; 我们这一侧只有100.1.1.2 怎么办&#xff1f; 找联通多要几个Ip&…

Go 工具链环境变量实战:从“command not found”到工具全局可用的全流程复盘

在 Go 生态里&#xff0c;丰富的命令行工具极大提升了开发效率。但很多小伙伴第一次用 go install 安装第三方工具后&#xff0c;却遇到终端里找不到命令的尴尬——明明装好了&#xff0c;终端却报 “command not found”。这是为什么呢&#xff1f;本文结合我亲身踩过的坑&…

MCU 软件断点注意事项!!!

——为什么调试器会在运行中改我的Flash程序&#xff1f;调试单片机时&#xff0c;很多人都有这样的疑问&#xff1a;明明我在调试前刷进去的固件是好的&#xff0c;为什么加了一个断点之后&#xff0c;调试器居然去改了 Flash&#xff1f; 如果我拔掉调试器&#xff0c;这个固…

腾讯iOA:数据安全的港湾

声明&#xff1a;文章为本人真实测评&#xff0c;非广告&#xff0c;无推广&#xff0c;为用户体验文章 前言 当前网络安全威胁日益复杂化&#xff0c;恶意软件攻击手段不断升级。例如&#xff1a;钓鱼邮件携带的伪装安装包可能引发勒索病毒在内网扩散&#xff0c;导致业务中断…

相册管理系统介绍

之前在github和gitee上了找了好久也没找到符合自己需求的相册管理系统&#xff0c;最近就静下心来自己写了一套。系统分为前台相册系统与后台管理系统。 技术框架采用的是前端vueelementui&#xff0c;后端springbootmybatisplus。 下面是项目截图&#xff1a;项目功能介绍&…

企业级高性能WEB服务器Nginx

nginx安装 1.nginx编译安装 #在nginx官网获取安装包 [rootwebserver mnt]# wget https://nginx.org/download/nginx-1.24.0.tar.gz#解压安装包 [rootwebserver mnt]# tar zxf nginx-1.24.0.tar.gz [rootwebserver mnt]# cd nginx-1.24.0/#安装编译nginx需要的环境软件 [rootw…

【Node.js从 0 到 1:入门实战与项目驱动】1.3 Node.js 的应用场景(附案例与代码实现)

文章目录1.3 Node.js 的应用场景&#xff08;附案例与代码实现&#xff09;1.3 Node.js 的应用场景&#xff08;附案例与代码实现&#xff09;一、Web 服务器开发二、API 开发三、命令行工具&#xff08;CLI&#xff09;开发四、实时应用开发小结1.3 Node.js 的应用场景&#x…

No time to train! Training-Free Reference-Based Instance Segmentation之论文阅读

摘要 图像分割模型的性能历来受到大规模标注数据收集成本高昂的制约。Segment Anything Model&#xff08;SAM&#xff09;通过一种可提示、与语义无关的分割范式缓解了这一根本问题&#xff0c;但在处理新图像时&#xff0c;仍然需要手动提供视觉提示或依赖复杂的领域相关提示…

本地文件夹与 GitHub 远程仓库绑定并进行日常操作的完整命令流程

以下是将本地文件夹与 GitHub 远程仓库绑定并进行日常操作的完整命令流程&#xff0c;特别针对你的需求&#xff08;忽略数据集、偏好使用 rebase 保持主分支整洁&#xff09;进行了优化&#xff1a; 一、初始设置&#xff08;首次绑定&#xff09;在本地项目文件夹初始化 Git …

windows10 ubuntu 24.04 双系统 安装教程

准备windows安装包解压到u盘中作为启动盘准备ubuntu安装包https://ubuntu.com/download/desktop/thank-you?version24.04.3&architectureamd64<strue解压到u盘中作为启动盘准备磁盘分区安装windows操作系统安装disk geniusWindows 三个NTFS的分区System: windows操作系…

腾讯前端面试模拟详解

以下是腾讯及腾讯音乐娱乐&#xff08;TME&#xff09;前端岗位高频手撕题目详解&#xff0c;结合真题及考察要点整理&#xff0c;覆盖面试核心考点&#xff1a;⚙️ 一、核心手撕题&#xff08;腾讯/TME 必考&#xff09; 1. Promise 并发控制&#xff08;90%场次出现&#xf…

微软将于 10 月停止混合 Exchange 中的共享 EWS 访问

使用 Exchange 混合部署的组织应为未来几个月即将生效的新变化做好准备。微软已宣布&#xff0c;自 2025 年 8 月起&#xff0c;将在某些混合环境中暂时阻止使用 Exchange Online 共享服务主体的 Exchange Web 服务 (EWS) 流量。 此项变更主要影响使用“丰富共存”功能的组织&a…