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 ❌ 不允许 ❌ 不可重复
相关推荐
2501_933670795 小时前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备
开发语言·python·sql
天衍四九-6 小时前
MySQL中如何定位慢查询?如果SQL语句执行很慢,如何分析和优化?
数据库·sql·mysql
-SOLO-6 小时前
开发笔记-摸鱼输入法
笔记
tianshi48517 小时前
Android 应用启动窗口(Splash Screen)的创建与销毁流程
android
脚踏实地,坚持不懈!7 小时前
ICU Calendar 实际工作问题排查手册
android
ii_best8 小时前
安卓脚本/ios开发软件按键精灵实战:自动定位弹窗广告关闭按钮坐标的通用方案
android·ios·自动化
天空之城--8 小时前
Android Jetpack Compose 状态管理浅析
android·android jetpack
程序员阿鹏8 小时前
为什么MySQL InnoDB选择B+树?
数据结构·数据库·b树·sql·mysql·算法·缓存
疯狂打码的少年9 小时前
【计算机网络】TCP/IP协议族(四层体系结构,与OSI对比)
网络·笔记·tcp/ip·计算机网络
瀚高PG实验室9 小时前
使用pg_stat_statements抓取数据库TOP SQL
数据库·sql·postgresql·瀚高数据库