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 ❌ 不允许 ❌ 不可重复
相关推荐
Horn Still Sounds18 分钟前
IMX6ULL裸机|I2C通信协议 + ADC模数转换学习笔记
arm开发·笔记·单片机·嵌入式硬件
LCD液晶屏2 小时前
京瓷液晶屏停产替代:杭州立煌科技工业 LCD 解决方案
android·科技
有范先生3 小时前
这次户外断粮危机后,我更在意主食能不能扛住极端环境了
笔记
杨云龙UP3 小时前
一次数据库查询缓慢故障复盘:大表数据增长、SQL全表扫描导致系统响应异常
linux·运维·服务器·数据库·sql·mysql
2501_932750264 小时前
Android 自定义 View 入门
android
2501_933670794 小时前
2027 应用统计学秋招选岗指南:统计、SQL、业务指标如何对应岗位
数据库·sql
喜欢打篮球的普通人4 小时前
MiniMind 学习笔记(十二):Pretrain 实操——从版本梳理到 8GB 显卡上的真实训练
人工智能·笔记·学习
坤坤子吖6 小时前
算法学习——高精度加减乘除
c++·笔记·学习·算法
事圆则缓6 小时前
Android 开启线程的几种方式:Thread、线程池、HandlerThread 与协程
android
Answer1st6 小时前
【HAL库】嵌入式思路(一)
笔记