【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数据类型

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

相关推荐
iAm_Ike16 小时前
Go 中自定义类型与基础类型间的显式类型转换详解
jvm·数据库·python
iuvtsrt16 小时前
Golang怎么实现方法集与接口的匹配_Golang如何理解值类型和指针类型实现接口的区别【详解】
jvm·数据库·python
chao18984417 小时前
基于 SPEA2 的多目标优化算法 MATLAB 实现
开发语言·算法·matlab
DianSan_ERP17 小时前
如何通过抖店订单接口实现订单状态管理与履约自动化?
运维·自动化
赏金术士17 小时前
Kotlin 习题集 · 高级篇
android·开发语言·kotlin
b***251117 小时前
18650电池点焊机:电阻焊技术如何决定电池组的成败|深圳比斯特自动化
运维·自动化
tongluowan00717 小时前
MySQL中列数量及长度
数据库·mysql
原来是猿17 小时前
网络计算器:理解序列化与反序列化(中)
linux·运维·服务器·网络·tcp/ip
前端老曹18 小时前
Docker 从入门到放弃:完整指南
运维·docker·容器
-liming-18 小时前
单片机设计_串口调试工具
数据库·单片机·mongodb