【MySQL约束】数据管理实用指南

news/2024/9/23 1:35:52/

1、数据库约束的认识

数据库约束的概念:数据库的约束是关系型数据库的一个重要的功能,它提供了一种“校验数据”合法性的机制,能够保证数据的“完整性”、“准确性”和“正确性”

数据库的约束:

  • not null:不能存储 null 值

  • unique:保证某列的每行必须有唯一值

  • default:规定没有给列赋值时的默认值

  • primary key:主键,相当于 not null 和 unique 的结合,每条记录的身份标识

  • aoto_increment:自动添加主键值,也可以手动添加

  • foreign key:外键,多个表的关联关系,要求某个记录必须在另外一个表里存在

2、not null 约束

创建一个student表,表中有两列,分别是: id 类型为 int 约束为 not null,name 类型为varchar 最大存储 20 字符

-- 如果已有student表,请先删除,因为同一个库里面不能存在相同名的表
create table student(id int not null,name varchar(20));

id 的约束为not null,说明 id 列不能为空

desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

查看student表的结构也就可以发现 id 行 Null 列为 NO,也就说明 id 列不能为 NULL

3、unique 约束

创建一个student表,表中有两列,分别是: id 类型为 int 约束为 unique,name 类型为varchar 最大存储 20 字符

-- 如果已有student表,请先删除,因为同一个库里面不能存在相同名的表
create table student(id int unique,name varchar(20));

id 的约束为 unique ,必须是唯一的、不能重复

desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  | UNI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

查看student表的结构也就可以发现 id 行 key 列的为 UNI,也就说明 id 必须唯一不能重复

4、default 约束

创建一个student表,表中有两列,分别是: id 类型为 int ,name 类型为varchar 最大存储 20 字符约束为 default

-- 如果已有student表,请先删除,因为同一个库里面不能存在相同名的表
create table student(id int,name varchar(20) default 'unkown');

name 的约束为 default ,当不给 name 添加内容的时候,默认为 unkown

desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | unkown  |       |
+-------+-------------+------+-----+---------+-------+

查看student表的结构也就可以发现 name 行 Default 列的为 unkown,也就说明当不给 name 添加内容的时候默认为 unkown

5、primary key 约束

创建一个student表,表中有两列,分别是: id 类型为 int 约束为 primary ,name 类型为varchar 最大存储 20 字符

-- 如果已有student表,请先删除,因为同一个库里面不能存在相同名的表
create table student(id int primary key,name varchar(20));

id 的约束为 primary key,说明id为主键,主键就相当于 not null 和 unique 的结合,不能为空、不能重复

desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

查看student 表的结构也就可以发现 id 行 Null 列为 NO,id 行 Key 列为 PRI,说明 id 不能为空、不能重复

当我们创建 student 表的时候,将 id 设置为 not null 和 unique 的时候,也就等于 primary key

-- 如果已有student表,请先删除,因为同一个库里面不能存在相同名的表
create table student(id int not null unique,name varchar(20));
desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

当把 id 的约束设置为 not null 和 unique 的时候,查看student 表结构的时候,发现跟约束为primary key的结构一样

6、auto_increment 约束

对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大 值+1

create table student(id int primary key auto_increment,name varchar(20));
desc student;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

当把 id 的约束设置为 primary key 和 auto_increment 的时候,不给 id 添加内容时默认是最大值+1

当我们光给这个表中的name列添加内容时

create table student(id int primary key auto_increment,name varchar(20));
select * from student;
+----+------+
| id | name |
+----+------+
|  1 | 张三 |
|  2 | 李四 |
+----+------+

id 列会默认添加值,且是最大值+1

7、foreign key 约束

外键用于关联其他表的主键和唯一值,让两个表之间产生约束,语法:

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

先创建一个class班级表:

create table class(id int primary key auto_increment,className varchar(20));

class 表中有两个列,分别为:

  • id 列,类型为 int,约束为 primary key 和 auto increment

  • className 列,类型为 varchar 最多存储 20字符

先创建一个 student 学生表:

create table student(id int primary key auto_increment,classId int ,
name varchar(20),
foreign key (classId) references class (id));

student 表中有三个列,分别为:

  • id 列,类型为 int,约束为 primary key 和 auto increment

  • classId 列,类型为 int

  • name 列,类型为 varchar 最多存储 20字符

  • classId为外键与class表中的id 产生约束

学生表中的数据,要依赖班级表的数据,班级表的数据要对学生表产生约束力

此处起到约束作用的班级表,就叫做“父表”;被约束的这个表,就叫做“子表”

给class表添加一些内容:

insert into class (className) values('Java'),('C'),('python');

给student表添加一些内容:

insert into student (classId,name) values(1,'张三'),(1,'李四'),(2,'王五'),(3,'赵六');


http://www.ppmy.cn/news/94009.html

相关文章

带你深入了解Fragment懒加载

Fragment懒加载是一种优化技术,用于在Android应用中延迟加载和初始化Fragment的内容,以提高应用性能和用户体验。它的核心思想是只有在Fragment可见时才加载数据和执行相关操作,而不是在Fragment创建或添加到Activity时立即加载。 懒加载的主…

java boot项目认识一下三种格式的配置文件

之前我们在 application.properties 中写了很多配置 但boot并不是只有这种配置方式 boot提供了三种配置方式给我们 话不多说 直接上代码 我们先将 resources下的 application.properties给他干掉 然后在下面创建一个 application.yml 在下面编写代码如下 server:port: 81这…

方法——检查参数的有效性

检查参数的有效性 绝大多数方法和构造方法对于传递给它们的参数都会有某些限制,比如对象引用不能为null,比如必须是正数等.你应该在文档中(或者注释中)清楚地指出所有这些限制,并且在方法体的开头检查参数,并且强制施加这些限制.如果做不到这一点,检测出错误的可能性就很小,即…

uCOSii中的互斥信号量

uCOSii中的互斥信号量 一、互斥型信号量项管理 (MUTUAL EXCLUSION SEMAPHORE MANAGEMENT) OSMutexAccept() 无条件等待地获取互斥型信号量 OSMutexCreate() 建立并初始化一个互斥型信号量 OSMutexDel() 删除互斥型信号量 OSMutexPend() 等待一个互斥型信号量 OSMutexPost…

【每日一题Day219】LC1093大样本统计 | 模拟

大样本统计【LC1093】 我们对 0 到 255 之间的整数进行采样,并将结果存储在数组 count 中:count[k] 就是整数 k 在样本中出现的次数。 计算以下统计数据: minimum :样本中的最小元素。maximum :样品中的最大元素。mean &#xff1…

Canonical标签在SEO中重要作用

canonical标签是很多搜索引擎都支持的一个标签,它的作用是标记某一网页的唯一url地址。这样做的目的是保证我们的某一网页在搜索引擎中只有一个唯一的地址。 Canonical标签对于一些入行不久的人来说,可能会有些陌生。但这个标签是很多搜索引擎都支持的标…

任务19 简单个人电话号码查询系统

系列文章 任务19 简单个人电话号码查询系统 问题描述 人们在日常生活中经常需要查找某个人或某个单位的电话号码,本实验将实现一个简单的个人电话号码查询系统,根据用户输入的信息(例如姓名等)进行快速查询。基本要求 (1) 在外存上,用文件保存电话号码信息; (2) 在内存中…

springboot+vue广场舞团系统(java项目源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的广场团舞系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风歌&a…