
🎬 个人主页 :艾莉丝努力练剑
❄专栏传送门 :《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 null,default,comment,zerofill,primary key,auto_increment,unique 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有所帮助,不要忘记给博主"一键四连"哦!
往期回顾:
🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა
