SQL 字段约束笔记

一、约束介绍

约束作用:在建表时给字段添加规则,限制表中数据 ,保证数据的完整性、合法性。

MySQL 常用约束:

  • not null:非空约束
  • unique:唯一约束
  • primary key:主键约束
  • auto_increment:主键自增
  • 联合主键(多个字段共同作为主键)
  • foreign key:外键约束

二、非空约束 not null

规则:被修饰的字段不能为 null,插入数据时必须提供值。

sql 复制代码
create table user(
    id int,
    name varchar(20) not null
);

说明:插入数据时 name 不能不赋值,不能写入 null。

三、唯一约束 unique

规则:当前字段所有数据不能重复,允许存在一个 null。

sql 复制代码
create table user(
    id int,
    phone varchar(11) unique
);

注意区分:unique 允许 null;主键不允许 null。

四、主键约束 primary key

主键 = 唯一约束 + 非空约束

特点:

  1. 字段不能重复,不能为 null
  2. 一张表只能有一个主键
sql 复制代码
-- 单列主键写法
create table user(
    id int primary key,
    name varchar(20)
);

主键自增 auto_increment

搭配整数主键使用,新增数据时自动生成递增数字,无需手动赋值。

sql 复制代码
create table user(
    id int primary key auto_increment,
    name varchar(20)
);

五、联合主键

概念:多个字段组合在一起共同充当主键

规则:多个字段组合整体不能重复,单独字段可以重复。

一张表依旧只能设置一组主键。

sql 复制代码
create table student_course(
    student_id int,
    course_id int,
    primary key (student_id, course_id)
);

示例理解:学生id + 课程id联合主键;同一个学生可以选多门课,同一课程可以被多个学生选,但【学生+课程】组合不能重复。

六、外键约束 foreign key

作用:维护多张表之间关联关系,保证引用数据合法。

  • 子表(从表):设置外键的表
  • 父表(主表):被引用的表,被引用列必须为主键
sql 复制代码
-- 主表
create table dept(
    dept_id int primary key,
    dept_name varchar(20)
);

-- 从表,建立外键关联
create table emp(
    emp_id int primary key auto_increment,
    emp_name varchar(20),
    d_id int,
    foreign key (d_id) references dept(dept_id)
);

⚠️ 开发重要提示:

互联网项目极少使用外键约束。外键会降低插入、删除性能,线上项目一般在业务代码层面控制关联逻辑。

七、约束对比小结

约束 关键字 是否允许null 是否允许重复
非空约束 not null ❌ 不允许 ✅ 允许重复
唯一约束 unique ✅ 允许1个null ❌ 不可重复
主键约束 primary key ❌ 不允许 ❌ 不可重复
相关推荐
袋鼠云数栈2 小时前
让 SQL 解析不再重复造轮子:SqlParserX 正式开源
数据库·人工智能·sql·开源·数据治理
xiaoshiquan12062 小时前
Gradle 复合构建:宿主项目直接依赖 SDK 源码模块的配置实践
android
果壳science3 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
程序员老赵3 小时前
Docker 部署 Hue:轻松搭建数据库与数据仓库 SQL 查询平台
sql·docker·开源
大叔学Linux4 小时前
FreeRTOS任务切换笔记
arm开发·笔记
小师兄吃牛肉4 小时前
Android Studio 2025 专业介绍:新特性、性能与开发体验全面解析
android·ide·android studio
美摄科技4 小时前
安卓离线类美颜特效SDK
android
梦影_5 小时前
MySQL进阶教程(一)—— 储存过程与触发器(上)
开发语言·数据库·后端·sql·mysql·中间件
fengci.6 小时前
BUUCTF(困难部分)
android·开发语言·前端·学习·php
职豚求职小程序刷题7 小时前
易方达基金2027秋招笔试|考什么+场次提醒
笔记