写点什么

MySQL 基础之十三:约束

用户头像
打工人!
关注
发布于: 2021 年 06 月 15 日
MySQL基础之十三:约束

主要内容:

本篇内容主要讲解一下建表时的各种约束。

约束分类:

在进行约束分类之前,先弄明白约束是什么?

在创建表的时候,我们可以给表的字段添加相应的约束,添加约束的目的就是为了保证表中数据的合法性,有效性,完整性。

比如在银行系统中,银行卡号就必须独一无二,不能重复,因此就必须给银行卡号对应的字段加上相应的约束。

下面简单介绍一下常见的约束都有哪些?

  • 非空约束(not null):约束字段的值不能为 null

  • 唯一约束(unique):值不能重复

  • 主键约束(primary key):既不能为 null,也不能重复(简称 PK)

  • 外键约束(foreign key)

  • 检查约束(check):ORACLE 数据库中有这个约束,mysql 中没有

非空约束:

这个其实很好理解,就是非空约束的字段对用的值不能为空。比如我们在建一个账号表时,用户名不能为空吧,只有填写了用户名,才可以接着填写其他信息,然后进行注册。只要在建表语句中子段后面加上 not null 就行。

唯一性约束:

唯一性约束的字段具有唯一性,不能重复,但是可以为 null。

列级约束:

username varchar(255) unique,

password varchar(255) unique,

列级约束就是给单个的子段添加唯一性约束。

表级约束:

username varchar(255),

password varchar(255),

unique(username,password),

如果 username=mary,password=123;和 username=mary,password=456,这两个用户符合唯一性约束,也就是说 username 和 password 两个字段值合起来不完全一样就符合唯一性约束。

主键约束:

  • 主键有什么作用:

表的设计三范式之一:要求任何一个表都应该有主键。

主键的作用:主键值是记录在这张表中的唯一标识。

  • 主键的相关术语:

主键约束

主键字段:被主键约束的字段

主键值:每一行记录中主键字段对应的值

  • 主键分类:

根据主键字段的字段数量来进行划分:

单一主键

复合主键:多个字段联合起来添加为一个主键约束---->这种不推荐

根据主键性质来划分:

自然主键:1,2,3,自增的这种

业务主键:主键值和系统的业务挂钩---->不推荐

小贴士:一张表的主键只能有一个

mysql 提供主键值自增:

mysql> drop table if exists t_user;

Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> create table t_user(

-> id int key auto_increment,

-> username varchar(255)

-> );

Query OK, 0 rows affected (0.13 sec)

mysql> insert into t_user(username) values('a');

Query OK, 1 row affected (0.03 sec)

mysql> select * from t_user;

+----+----------+

| id | username |

+----+----------+

| 1 | a |

+----+----------+

1 row in set (0.01 sec)

auto_increment:自动维护一个自增的数字,从 1 开始。

外键约束:

外键值可以为 null 吗?

可以。

外键约束引用的其他表的字段时,被引用的字段必须是主键吗?

不一定,但是必须保证至少具有 unique 约束。

mysql> drop table if exists t_student; // 子表

mysql> drop table if exists t_class; //父表

mysql> create table t_class(

-> cno int,

-> cname varchar(255),

-> primary key (cno)

-> );

Query OK, 0 rows affected (0.07 sec)

mysql> create table t_student(

-> sno int,

-> sname varchar(255),

-> classno int,

-> foreign key(classno) references t_class(cno)

-> );

Query OK, 0 rows affected (0.10 sec)

foreign key(classno) references t_class(cno):就是 t_student 表使用外键把 t_class 表的主键 cno 引用为自己的主键。

发布于: 2021 年 06 月 15 日阅读数: 9
用户头像

打工人!

关注

打工人! 2019.11.10 加入

InfoQ年度最佳内容获得者。 InfoQ签约作者 本人打工人一枚,自动化和控制专业入坑人一枚。目前在研究深度强化学习(DRL)技术。准备入坑互联网小白一枚。喜欢了解科技前沿技术,喜欢拍照。

评论

发布
暂无评论
MySQL基础之十三:约束