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 ❌ 不允许 ❌ 不可重复
相关推荐
今天AI了吗1 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习
liuyicenysabel2 小时前
多服务上线日记三:
运维·服务器·笔记·学习
CHENGQUAN_kenan2 小时前
佛山亚马逊卖家出口退税合规指南|9610免税、一般贸易退税、无票采购、申报误区全覆盖
大数据·经验分享·笔记·百度
Csvn2 小时前
📊 SQL 入门 Day 22:视图与物化视图
后端·sql
夜雪一千3 小时前
MySQL 全局锁是什么?原理、风险、备份踩坑完整实战
android·mysql·adb
一只小小的芙厨3 小时前
基础数论总结
笔记·学习·算法
@Mike@6 小时前
09-数据库学习笔记(数据库索引与过滤器)
数据库·笔记
一米阳光86616 小时前
软考(中级)软件设计师核心笔记(9)算法——背包问题
笔记·算法·职场发展·软考·软件设计师·中级职称
Chris _data6 小时前
WPF 上位机开发学习笔记 - 第四天
笔记·学习·wpf
树的枝7 小时前
【STM32】03.中断和EXTI外设
笔记·stm32·单片机·嵌入式硬件