【MYSQL】MYSQL学习的一大重点:表的约束

🎬 个人主页艾莉丝努力练剑
专栏传送门 :《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录
Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享

⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平


🎬 艾莉丝的简介:


文章目录

  • 前言
  • [1 ~> 空约束(NULL / NOT NULL)](#1 ~> 空约束(NULL / NOT NULL))
  • [2 ~> 默认值(DEFAULT)](#2 ~> 默认值(DEFAULT))
  • [3 ~> 列描述(COMMENT)](#3 ~> 列描述(COMMENT))
  • [4 ~> ZEROFILL](#4 ~> ZEROFILL)
  • [5 ~> 主键(PRIMARY KEY)](#5 ~> 主键(PRIMARY KEY))
    • [5.1 主键的概念和示例](#5.1 主键的概念和示例)
    • [5.2 复合主键](#5.2 复合主键)
    • [5.3 追加主键](#5.3 追加主键)
    • [5.4 删除主键](#5.4 删除主键)
  • [6 ~> 自增长(AUTO_INCREMENT)](#6 ~> 自增长(AUTO_INCREMENT))
    • [6.1 自增长的概念和示例](#6.1 自增长的概念和示例)
    • [6.2 获取上次插入的自增值](#6.2 获取上次插入的自增值)
  • [7 ~> 唯一键(UNIQUE KEY)](#7 ~> 唯一键(UNIQUE KEY))
  • [8 ~> 外键(FOREIGN KEY)](#8 ~> 外键(FOREIGN KEY))
  • [9 ~> 综合案例](#9 ~> 综合案例)
    • [9.1 表结构](#9.1 表结构)
    • [9.2 SQL 示例(节选)](#9.2 SQL 示例(节选))
  • 结尾


前言

  • 约束用于保证数据的合法性和业务逻辑的正确性,补充数据类型本身的限制。

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。

表的约束很多,这里主要介绍如下几个:null / not nulldefaultcommentzerofillprimary keyauto_incrementunique key


1 ~> 空约束(NULL / NOT NULL)

  • NULL:默认值,字段可以为空。

  • NOT NULL:字段不能为空,防止数据缺失影响运算。

示例:

sql 复制代码
create table myclass (
    class_name varchar(20) not null,
    class_room varchar(10) not null
);

2 ~> 默认值(DEFAULT)

为字段指定默认值,插入数据时若未提供该字段值,则使用默认值。

示例:

sql 复制代码
create table tt10 (
    name varchar(20) not null,
    age tinyint unsigned default 0,
    sex char(2) default '男'
);

3 ~> 列描述(COMMENT)

用于描述字段含义,供程序员或DBA参考,无实际约束作用。

示例:

sql 复制代码
create table tt12 (
    name varchar(20) not null comment '姓名',
    age tinyint unsigned default 0 comment '年龄',
    sex char(2) default '男' comment '性别'
);

查看注释:

sql 复制代码
show create table tt12;

4 ~> ZEROFILL

用于数字类型,显示时在左侧补零,宽度由括号中的数字决定。

不加 zerofill 时,括号内数字无实际意义。

示例:

sql 复制代码
alter table tt3 modify a int(5) zerofill;

5 ~> 主键(PRIMARY KEY)

5.1 主键的概念和示例

唯一标识一条记录,不允许重复,不允许为空。

支持单列主键和复合主键。

示例:

sql 复制代码
create table tt13 (
    id int unsigned primary key,
    name varchar(20) not null
);

5.2 复合主键

sql 复制代码
create table tt14 (
    id int unsigned,
    course char(10),
    score tinyint unsigned default 60,
    primary key(id, course)
);

5.3 追加主键

sql 复制代码
alter table 表名 add primary key(字段列表);

5.4 删除主键

sql 复制代码
alter table 表名 drop primary key;

6 ~> 自增长(AUTO_INCREMENT)

6.1 自增长的概念和示例

自动为字段生成唯一递增的值,通常与主键搭配使用。

要求:

  • 字段必须是整数类型

  • 必须是索引(如主键)

  • 一张表最多一个自增长字段

示例:

sql 复制代码
create table tt21 (
    id int unsigned primary key auto_increment,
    name varchar(10) not null default ''
);

6.2 获取上次插入的自增值

sql 复制代码
select last_insert_id();

7 ~> 唯一键(UNIQUE KEY)

保证字段值唯一,但允许为NULL,且多个NULL不视为重复。

用于补充主键,满足多个字段的唯一性需求。

示例:

sql 复制代码
create table student (
    id char(10) unique comment '学号,不能重复,但可以为空',
    name varchar(10)
);

8 ~> 外键(FOREIGN KEY)

建立主表与从表之间的关联,确保数据一致性。

外键字段的值必须在主表的主键或唯一键中存在,或为 NULL。

示例:

sql 复制代码
create table stu (
    id int primary key,
    name varchar(30) not null,
    class_id int,
    foreign key (class_id) references myclass(id)
);

9 ~> 综合案例

一个包含商品、客户、购买记录的数据库设计,展示了多种约束的综合使用。

9.1 表结构

商品表(goods)

  • 主键:goods_id

  • 约束:goods_name 非空,unitprice 默认 0

客户表(customer)

  • 主键:customer_id

  • 约束:name 非空,email 唯一,sex 枚举类型,card_id 唯一

购买表(purchase)

  • 主键:order_id

  • 外键:customer_id 引用 customer(customer_id)

  • 外键:goods_id 引用 goods(goods_id)

9.2 SQL 示例(节选)

sql 复制代码
create table goods (
    goods_id int primary key auto_increment comment '商品编号',
    goods_name varchar(32) not null comment '商品名称',
    unitprice int not null default 0 comment '单价,单位分',
    category varchar(12) comment '商品分类',
    provider varchar(64) not null comment '供应商名称'
);

create table customer (
    customer_id int primary key auto_increment comment '客户编号',
    name varchar(32) not null comment '客户姓名',
    address varchar(256) comment '客户地址',
    email varchar(64) unique key comment '电子邮箱',
    sex enum('男','女') not null comment '性别',
    card_id char(18) unique key comment '身份证'
);

create table purchase (
    order_id int primary key auto_increment comment '订单号',
    customer_id int comment '客户编号',
    goods_id int comment '商品编号',
    nums int default 0 comment '购买数量',
    foreign key (customer_id) references customer(customer_id),
    foreign key (goods_id) references goods(goods_id)
);

结尾

uu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!

结语:希望对学习MYSQL相关内容的uu有所帮助,不要忘记给博主"一键四连"哦!

往期回顾

【MYSQL】MYSQL学习的一大重点:MYSQL数据类型

🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა

相关推荐
2401_873544922 小时前
使用Black自动格式化你的Python代码
jvm·数据库·python
Fortune792 小时前
用Python破解简单的替换密码
jvm·数据库·python
叶子野格2 小时前
Notepad++编写html文件使用D3绘图:数据可视化
笔记·学习·信息可视化·开源·notepad++
程序猿编码2 小时前
基于ncurses的TCP连接可视化与重置工具:原理与实现(C/C++代码实现)
linux·c语言·网络·c++·tcp/ip
Sunshine for you2 小时前
高性能压缩库实现
开发语言·c++·算法
Chase_______2 小时前
【2026最新保姆级】Python 安装与PyCharm安装配置指南 (Window版)
开发语言·python·pycharm
Sunshine for you2 小时前
C++中的表达式模板
开发语言·c++·算法
Chunyyyen2 小时前
【第三十八周】论文复现记录01
学习
qwehjk20082 小时前
C++中的状态模式
开发语言·c++·算法