0
点赞
收藏
分享

微信扫一扫

【MySQL】表约束和表设计

酷子腿长一米八 2022-03-17 阅读 47

表约束和表设计

数据库约束

表约束

表约束是在创建表的时候,设计一些表的约束条件,用来保证数据的合法性和数据的正确性。

常见表约束:

约束说明
NOT NULL⾮空约束,指示某列不能存储 NULL 值
UNIQUE唯⼀约束,保证某列的每⾏必须有唯⼀的值
PRIMARY KEY主键约束,确保某列(或两个列多个列的结合)有唯⼀标识,有助于 更容易更快速地找到表中的⼀个特定的记录。
FOREIGN KEY外键约束,保证⼀个表中的数据匹配另⼀个表中的值的参照完整性。
CHECK检查约束, 保证列中的值符合指定的条件。对于MySQL数据库,对 CHECK⼦句进⾏分析,但是忽略CHECK⼦句。
AUTO_INCREMENT⾃增约束,插⼊可忽略此字段,此字段会⾃⼰增加存储数值。默认是从 1 开始,每次递增 1。
DEFAULT默认值约束, 规定没有给列赋值时的默认值。

非空约束 NOT NULL

⾮空约束,指示某列不能存储 NULL 值

语法:

create table 表名(id  int not null......)

非空约束的作用:
在这里插入图片描述
查看真空约束:

desc 表名;

一个表中的非空约束是没有限制的,要根据实际场景来考虑需要几个,可以为0-n个。

唯一约束 UNIQUE

唯一约束就是对应字段的值是唯一的,不可以重复。

语法:

字段名 数据类型 unique

唯一约束的作用:在这里插入图片描述
在这里插入图片描述
唯一约束特征:
一个表中可以有多个或一个唯一约束。
唯一约束字段可以插入Null值,且可插入多个,null表示‘‘ ’’。

查看唯一约束语法:

 show keys from 表名;

在这里插入图片描述
在这里插入图片描述

主键约束PRIMARY KE

主键的特征:
1.一张表只能有一个主键;
2.一个主键可以由一个或多个字段;
3.主键不能为空且唯一;

优点:可以快速查找表中特定数据
主键是可以用来表示一张表中某条数据的代表凭证。
语法:
创建单字段主键:

字段 字段类型 primary key;

创建联合主键或单个主键:

create table 表名(id  int ......,name varchar(250),primary key (id,name));

在这里插入图片描述
联合主键:多个字段联合起来形成的主键,因此主要多个字段不重复,那么插入数据就可以成功。
独立主键:只有一个字段作为主键,因此主键不能出现重复。

常见面试题:
主键约束VS唯一约束:
1.一个表中主键约束只能有一个,而唯一约束可以有很多。
2.唯一约束可以插入一个或多个null,而主键约束不允许插入null。

外键约束FOREIGN KEY

外键用于关联其他表的主键或唯一键。
语法:

foreign key (字段名) references 主表(列)

在这里插入图片描述
外键允许插入null.且可插入多个null,但如果指定数据那这个值必须在主表中存在。在这里插入图片描述

检查约束 CHECK

语法:

check (检查约束);

在这里插入图片描述

check约束在MySQL8.0.15之前的版本不起作用,只有在MySQL8.0.16之后的版本才可使用。

自增约束AUTO_INCREMENT

语法:

字段 字段类型 auto_increment

创建主键自增约束:在这里插入图片描述
在这里插入图片描述
1.当给自增列插入null值时,MySQL会自动生成下一个序列编号。
2.当插入值时,没有为auto_increment 明确指定值,等同插入null值。
3.一个表中只能有一个字段使用auto_increment。

注意事项:
1.aoto_inrcement必须配合key进行使用。key不一定要是主键约束。
2.auto_increment 必须配合整数数值使用。
3.一张表中只能有一个auto_increment 约束。
手动指定自增值:
(字段)auto_increment= n;
`
手动修改自增值:

alter table 表名 auto_increment = n;

在这里插入图片描述

默认约束DEFAULT

默认约束是没有给列赋值时的默认值
语法:

字段 字段类型 约束条件;

在这里插入图片描述

表设计

表的三范式

第一范式

确保每列都保持最小的不可分割的原子值。
第一范式的好处:减少了数据冗余,更利于数据的维护和更新。
示例:
在这里插入图片描述

第二范式

一个表中的所有字段都必须要和主键有关。
错误示例:
在这里插入图片描述
正确示例:
在这里插入图片描述第二范式的优点:利于修改,利于维护,方便展示。

第三范式

确保每列都和主键列直接相关,⽽不是间接相关。
在满足第一范式和第二范式的基础上,要满足所有的字段不能出现对非主键的间接依赖。
错误示例:
在这里插入图片描述记号笔标记的几个字段产生依赖,修改前面的字段可能会导致其他字段产生变化。
正确示例:
在这里插入图片描述优点:实现列和非主键列的解耦。修改了一个字段,减少数据冗余。

表关系

表和表之间的关系有三种:
● ⼀对⼀:⼀个学⽣对应⼀个学号。
在这里插入图片描述

● ⼀对多:⼀个班级包含多个学⽣(⽤两张表表示)。
在这里插入图片描述

● 多对多:⼀张表中的⼀条数据可以对应到另⼀张表的多条数据,反之也是这样的,这样的关系叫做 多对多,⼀般⽤三个表表示。
在这里插入图片描述

举报

相关推荐

【MySQL】表的约束

MYSQL表的约束

Mysql表的约束

Mysql——表的约束

MySQL表的约束

MySQL 表的约束

【mysql】—— 表的约束

MySQL:表的约束和基本查询

0 条评论