首页 > 数据库 >MySQL数据库的约束与设计解读

MySQL数据库的约束与设计解读

来源:互联网 2026-03-25 19:01:32

目录1.数据库的约束1.1 定义1.2 约束类型1.3 非空约束(not null)1.4 默认约束(default)1.5 唯一约束(unique)1.6 主键约束(primary key)1.6.1 自增主键(auto_increment)1.7 外键约束(foreign key)1.8 check约束2. 数据库设计2.1 范式2.2 第一范式2.3 第二范式2.4 第三范式2.5 数据库的设计过程3. 实体-关系图3.1 E-R图的组成部分3.2实体与实体的关系3.2.1 一对一关系3.2.2 一

1.数据库的约束

1.1 定义

数据库约束就像是给数据上了一道保险,通过设定明确的规则和条件,确保每一条数据都准确可靠。

1.2 约束类型

MySQL数据库的约束与设计解读

1.3 非空约束(not null)

not null约束相当于是给数据列设定了必填项。一旦某个字段被标记为not null,就意味着这个位置必须要有值,不能留空。

create table teacher(id bigint,name varchar(20) not null);

比如这个例子,name字段就被设定为必填项,确保每位老师都有姓名记录。

1.4 默认约束(default)

default约束就像是给数据准备了一个备用方案。当插入数据时没有明确指定某个字段的值,系统就会自动使用预设的默认值来填充。

create table teacher(id bigint,name varchar(20),age bigint default 18);

看到这里,age字段设置了默认值18。这意味着如果新增老师记录时没有填写年龄,系统会自动将其年龄记录为18岁。

1.5 唯一约束(unique)

unique约束确保的是数据的唯一性——就像每个人的身份证号,不允许出现重复。有意思的是,在数据库的世界里,空值和空值之间不算重复。

create table teacher(id bigint,name varchar(20),age bigint default 18,sno varchar(20) unique);

这里给sno(学号)字段加上了唯一约束,确保每个学号都是独一无二的。

1.6 主键约束(primary key)

primary key可以说是数据表的身份证,它同时具备了唯一性和非空性两个特点。每个表只能有一个主键,通常用来标识每条记录的唯一身份。

实际操作中,那些具有身份标识作用的字段最适合作为主键,比如老师的工号、学生的学号等。

create table teacher(id bigint primary key,name varchar(20),age bigint default 18,sno varchar(20) unique);

有时候,单一字段不足以唯一标识一条记录,这时候可以采用复合主键:

create table teacher(id bigint,name varchar(20),age bigint,sno varchar(20)primary key(id,name));

1.6.1 自增主键(auto_increment)

自增主键通过primary key auto_increment来定义,特别适合整数类型的列。它会自动在现有最大值的基础上加1,省去了手动编号的麻烦。

create table teacher(    id bigint primary key auto_increment,    name varchar(20));

不过,自增主键在分布式环境下会遇到挑战。想象一下,当学生表的数据量巨大需要分到多个服务器时,单纯的自增就可能产生重复ID。这时候就需要更复杂的方案来生成全局唯一主键。

常见的解决方案是构建一个字符串ID,通过组合时间戳、机器编号、随机因子等元素生成哈希值,从而确保在任何环境下都能保持唯一性。

1.7 外键约束(foreign key)

外键约束使用foreign key关键字,它在两个表之间建立起约束关系,确保数据的引用完整性。

来看学生表和班级表的例子:

MySQL数据库的约束与设计解读

create table student(s_id int, s_name varchar(20), s_sex varchar(20), class_id int);
insert into student values (1,'张三','男',1);
insert into student values (2,'李四','女',2);
insert into student values (3,'王五','男',3);

create table class(class_id int, class_name varchar(20));
insert into class values (1,'一班');
insert into class values (2,'二班');
insert into class values (3,'三班');

在没有外键约束的情况下,这两张表可以随意插入数据。但一旦在学生表的class_id上添加外键约束,两个表就正式建立了关联:

create table student(s_id int, s_name varchar(20), s_sex varchar(20), class_id int, foreign key (class_id) references class (class_id));

外键约束的核心作用在于维护表间的数据一致性。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。