MySQL 表的约束

devtools/2024/10/18 16:46:25/

文章目录

  • 空属性
  • 默认值
  • 列描述
  • 填充零
  • 主键
  • 自增长
  • 唯一键
  • 外键

约束的概念

MySQL 表的约束是指对表中数据的一种规则或限制,用于确保数据的完整性、一致性和有效性。这些约束规定了对表中列的值所允许的条件,以及对表之间关系的限制。
是数据类型本身就是一种约束,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是身份证号,要求是唯一的。

空属性

非空约束规定列中的值不能为 NULL。如果尝试将 NULL 值插入具有非空约束的列,则会触发错误或警告。

设置示例:

mysql> create table myclass(
-> class_name varchar(20) not null,
-> class_room varchar(10) not null );

默认值

默认约束规定了当插入新行时,如果未指定某列的值,则将使用默认值。如果未指定默认值,则该列的默认值为 NULL(如果没有非空约束)。

mysql> create table tt10 (
-> name varchar(20) not null,
-> age tinyint unsigned default 0,
-> sex char(2) default '男'
-> );

列描述

comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。简单理解就是注释。

mysql> create table tt12 (
-> name varchar(20) not null comment '姓名',
-> age tinyint unsigned default 0 comment '年龄',
-> sex char(2) default '男' comment '性别'
-> );

填充零

 CREATE TABLE `tt3` (
`a` int(5) unsigned zerofill DEFAULT NULL, --具有了zerofill
`b` int(5) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk ; 
-- 将a,b列的都新增值-1
mysql> select * from tt3;
+-------+------+
| a     | b    |
+-------+------+
| 00001 | 1    |
+-------+------+

主键

primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型。

mysql> create table tt13 (
-> id int unsigned primary key comment '学号不能为空',
-> name varchar(20) not null);

追加主键

alter table 表名 add primary key(字段列表)

删除主键

alter table 表名 drop primary key;

复合主键

在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。

使用复合主键的好处包括:

唯一性保证: 每个组合值都必须是唯一的,这样可以避免数据冲突和重复。

性能优化: 在某些情况下,使用复合主键可以提高数据库表的性能。例如,在联合查询或按照复合主键进行检索时,MySQL可以更有效地利用索引。

数据逻辑关系的反映: 有时,数据的逻辑关系需要通过多个列来定义。通过使用复合主键,您可以更准确地反映这种复杂的关系。

索引优化: 复合主键通常会自动创建复合索引,这可以加快对表的查询操作。


CREATE TABLE 表名 (1 数据类型,2 数据类型,...PRIMARY KEY (1,2)
);

自增长

当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
使用条件:

任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
自增长字段必须是整数
一张表最多只能有一个自增长

设置索引 + 自增长:

mysql> create table tt21(
-> id int unsigned primary key auto_increment,
-> name varchar(10) not null default ''
-> );

唯一键

一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。

关于唯一键和主键的区别

  1. NULL值: 主键列不允许包含NULL值,而唯一键列可以包含NULL值(但唯一键的值必须在非NULL值中保持唯一)。
  2. 数量限制: 每个表只能有一个主键,但可以有多个唯一键。
  3. 索引类型: 主键通常会自动创建聚集索引,而唯一键则创建非聚集索引。
  4. 一般而言,我们建议将主键设计成为和当前业务无关的字段,这样,当业务调整的时候,我们可以尽量不会对主键做过大的调整。(比如账号ID和身份证ID,将身份证设为主键,业务处理通过账号ID处理,这样对账号ID调整时效率高,因为唯一键索引通常为非聚簇索引)

外键

外键(Foreign Key)在MySQL中是一种关系约束,用于建立表与表之间的关联。外键是一个表中的字段(或一组字段),其值必须是另一表的主键或唯一键的值之一。它们用于确保关系数据库的引用完整性,保证了表之间的数据一致性。

CREATE TABLE 表名 (列1 数据类型,列2 数据类型,FOREIGN KEY (外键列) REFERENCES 关联表名(主键或唯一键列)
);

实例图解:
在这里插入图片描述


http://www.ppmy.cn/devtools/14182.html

相关文章

【LInux】进程管理

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…

牛客Linux高并发服务器开发学习第四天

Makefile 工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中。 Makefile文件定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因…

Nest.js项目小结1

整体项目结构 prisma\ (用于管理数据库迁移、定义数据模型和数据填充) migrations\ (日志记录,不用管) schema.prisma (定义数据模型) seed.ts (用于填…

毕业设计注意事项(2024届更新中)

1.开题 根据学院发的开题报告模板完成,其中大纲部分可参考资料 2.毕设 根据资料中的毕设评价标准,对照工作量 3.论文 3.1 格式问题 非常重要,认真对比资料中我发的模板,格式有问题,答辩输一半! 以word…

人工智能技术概述_3.机器学习

1.机器学习定义 广义上来说,机器学习指专门研究计算机怎么模拟或实现人类的学习行为以获取新的知识或技能的学科,使计算机重新组织已有的组织结构并不断改善自身的性能。更加精确地说,一个机器学习的程序就是可以从经验数据E中对任务T进行学习…

【HarmonyOS】Stage 模型 - 基本概念

一、项目结构 如图1所示: 图1 从项目结构来看,这个应用的内部包含了一个子模块叫 entry,模块是应用的基本功能单元,它里面包含源代码、资源、配置文件等。 像这样的模块在应用内部可以创建很多。但模块整体来讲就分成两大类&am…

C# Solidworks二次开发:获取模型、组件、主体的表面积相关API详解

大家好,今天要介绍模型、组件、主体的表面积相关API。 下面是今天要介绍的API: (1)第一个为SurfaceArea Property (IMassProperty),这个API的含义为获取此模型的表面积,下面是官方的具体解释: 其没有输入…

阿斯达年代记三强争霸开服 游戏下载安装+账号注册教程一览

阿斯达年代记国际服是一款MMORPG手游,游戏支持自由交易是一款可以搬砖的游戏,游戏目前开放的4个职业,战士,弓箭手,祭司,斗士,其中战士是拉剑盾为主的职业,主T,由于这1款游…