MySql 数据库【约束】

article/2025/9/28 3:20:31

MySql 数据库【约束】

  • 1. 什么是约束?
  • 2. 约束包括哪些?
  • 3. 非空约束
  • 4. 唯一性约束
    • 1. 单字段唯一性约束
    • 2. 多字段唯一性约束
  • 5. 主键约束
    • 1. 主键约束的相关术语?
    • 2. 什么是主键?有啥用?
    • 3. 单一主键
    • 4. 复合主键
    • 5. 其他主键
  • 6. 外键约束
    • 1. 外键约束的相关术语
    • 2. 外键出现的原因
    • 3. 创建外键表

1. 什么是约束?

约束对应的英语单词:constraint
在创建表的时候,我们可以给表中的字段加上一些约束,来保证表中的数据的完整性、有效性!!!

约束的作用就是为了保证:表中的数据有效!!

2. 约束包括哪些?

非空约束 not null
唯一性约束 unique
主键约束 primary key
外键约束 foreign key
检查约束 check

3. 非空约束

非空约束 not null 约束的字段不能为 NULL

mysql> create table t_vip(id int, name varchar(255) not null);

在这里插入图片描述

mysql> insert into t_vip(id, name) values(1, 'zhangsan');
mysql> insert into t_vip(id, name) values(2, 'lisi');

在这里插入图片描述

mysql> insert into t_vip(id) values(3);
ERROR 1364 (HY000): Field 'name' doesn't have a default value

在这里插入图片描述

4. 唯一性约束

唯一性约束 unique 约束的字段不能重复,但是可以为 NULL

1. 单字段唯一性约束

mysql> create table t_vip(id int, name varchar(255) unique, email varchar(255));

在这里插入图片描述

mysql> insert into t_vip(id, name, email) values(3, 'lisi', 'lisi@123.com');
ERROR 1062 (23000): Duplicate entry 'lisi' for key 't_vip.name'
mysql> select * from t_vip;

在这里插入图片描述

2. 多字段唯一性约束

需求:name 和 email 两个字段联合起来具有唯一性!!!

mysql> create table t_vip(id int, name varchar(255) unique, email varchar(255) unique);

这样创建的表是不符合上述需求的,因为 name 具有唯一性,email 具有唯一性。两个字段各自具有唯一性。

mysql> create table t_vip(id int, name varchar(255), email varchar(255), unique(name, email));
mysql> insert into t_vip(id, name, email) values(1, 'zhangsan', 'zhangsan@123.com');
mysql> insert into t_vip(id, name, email) values(1, 'zhangsan', 'zhangsan@sina.com');

在这里插入图片描述

5. 主键约束

主键约束 primary key 简称 pk

1. 主键约束的相关术语?

  1. 主键约束:就是一种约束。
  2. 主键字段:该字段上添加了主键约束,这样的字段叫做:主键字段。
  3. 主键值:主键字段中的每一个值都叫做:主键值。

2. 什么是主键?有啥用?

主键值是每一行记录的唯一标识
主键值是每一行记录的身份证号!!!

记住:任何一张表都应该有主键,没有主键,表无效!!!

主键的特征:not null + unique(主键值不能是 NULL,同时也不能重复)

3. 单一主键

mysql> create table t_vip(id int primary key, name varchar(255));

在这里插入图片描述

  1. 主键不能重复
mysql> insert into t_vip(id, name) values(2, 'lisi');
ERROR 1062 (23000): Duplicate entry '2' for key 't_vip.PRIMARY'

在这里插入图片描述

  1. 主键不能为NULL
mysql> insert into t_vip(name) values('lisi');
ERROR 1364 (HY000): Field 'id' doesn't have a default value

在这里插入图片描述

4. 复合主键

mysql> create table t_vip(id int, name varchar(255), email varchar(255), primary key(id, name));

在这里插入图片描述

mysql> insert into t_vip(id, name, email) values(1, 'zhangsan', 'zhansgan@123.com');
mysql> insert into t_vip(id, name, email) values(1, 'lisi', 'lisi@123.com');

在这里插入图片描述

5. 其他主键

除了单一主键和复合主键外,还拥有:

  • 自然主键:主键值是一个自然数,和业务没有关系。
  • 业务主键:主键值和业务紧密关联,例如拿银行卡账号做主键值。这就是业务主键!

实际开发中,使用自然主键多,很少使用业务主键!!!
主键一旦和业务值挂钩,可能会出现各种问题!!!

6. 外键约束

外键页数 foregin key 简称 fk

1. 外键约束的相关术语

  1. 外键约束:一种约束:foregin key。
  2. 外键字段:该字段上添加了外键约束。
  3. 外键值:外键字段当中的每一个值。

2. 外键出现的原因

业务背景:
请设计数据库表,来描述 “班级和学生” 的信息?

第一种方案:班级和学生存储在一张表中
在这里插入图片描述
分析上述方案的缺点:数据冗余,空间浪费!!!

第二种方案:班级一张表,学生一张表
在这里插入图片描述
在这里插入图片描述
当 cno 字段没有任何约束的时候,可能会导致数据无效。可能出现一个 102,但是 102 班级不存在,所以为了保证 cno 字段中的值都是 100 和 101,需要给 cno 字段添加外键约束。
那么:cno 字段就是外键字段。cno 字段中的每一个值都是外键值。

注意:
t_class 是父表
t_student 是字表

删除表的顺序?
先删子,再删父。

创建表的顺序?
先创建父,再创建子。

删除数据的顺序?
先删子,再删父。

插入数据的顺序?
先插入父,再插入子。

3. 创建外键表

  1. 创建表
mysql> create table t_class(classno int primary key, classname varchar(255));
mysql> create table t_student(no int primary key auto_increment, name varchar(255), cno int, foreign key(cno) references t_class(classno));

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

  1. 插入数据
mysql> insert into t_class(classno, classname) values(100, '北京市大兴区亦庄镇第二中学高三1班');
mysql> insert into t_class(classno, classname) values(101, '北京市大兴区亦庄镇第二中学高三2班');

在这里插入图片描述

mysql> insert into t_student(name, cno) values('jack', 100);
mysql> insert into t_student(name, cno) values('lucy', 100);
mysql> insert into t_student(name, cno) values('lilei', 100);
mysql> insert into t_student(name, cno) values('hanmeimei', 100);
mysql> insert into t_student(name, cno) values('zhangsan', 100);
mysql> insert into t_student(name, cno) values('lisi', 100);
mysql> insert into t_student(name, cno) values('wangwu', 100);
mysql> insert into t_student(name, cno) values('zhaoliu', 100);

在这里插入图片描述

注意:子表中的外键引用的父表中的某个字段,被引用的这个字段必须是主键吗?
不一定是主键,但至少具有 unique 约束。


http://chatgpt.dhexx.cn/article/CJSeBjaV.shtml

相关文章

MySQL_数据库的约束

文章目录 1. NULL约束 2. UNIQUE(唯一约束) 3. DEFAULT(默认值约束) 4. PRIMARY KEY(主键约束) 5. FOREIGN KEY(外键约束) 数据库的约束就是关系型数据库给我们提供的一种"校验数据"合法性的机制 1. NULL约束 创建表时,可以指定某列不为空 create table stud…

MYSQL--数据库约束

文章目录 1.数据库约束1.1约束类型1.2 null约束1.3 unique:唯一约束条件1.4 default:默认值约束1.5 primary key1.6 foreign key:外键约束 2.表的设计2.1一对一2.2一对多2.3多对多 1.数据库约束 1.1约束类型 not null: 指示某列不能存储null值;unique: 保证某列的…

MySQL 数据库约束

目录 一、数据库约束 1、约束类型 二、NULL 约束 三、unique 约束 四、default 约束 五、primary key 约束 自增主键 六、foreign key 外键约束 七、check 约束 一、数据库约束 我们使用数据库来存储数据,一般是希望这里存储的数据是靠谱的,…

数据库的约束和设计(完整版)

第一部分(约束和表设计) 1、DQL查询语句-limit语句(掌握) LIMIT是限制的意思,所以LIMIT的作用就是限制查询记录的条数 LIMIT语句格式: SELECT 字段 FROM 表名 LIMIT 索引, 显示条数; 索引:从0开始,一直变化 显示条数:每页显示…

MySQL数据库之数据库约束,一文带你了解

前言 从今天开始本系列就带各位小伙伴学习数据库技术。数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深, 全面讲解数据库体系。 非常适合零基础的小伙伴来学习。 全文大约 【1785】字,不说废话,只讲可以让你学…

数据库的约束和设计

约束 作用 对表中的数据进行进一步的限制, 保证数据的正确性, 有效性和完整性 种类 primary key : 主键约束unique : 唯一约束not null : 非空约束default : 默认值foreign key : 外键约束auto_increment : 自增约束(适用于int数据类型) 主键约束 特点 非空且唯一 注意事项 …

MySQL:数据库的约束

目录 1.数据库约束 1.1 非空:not null 1.2 唯一:unique ​​​​​​​ 1.3 默认值:default 1.4 列描述:comment 1.5 主键约束:primary key 1.6 外键约束 1.7 综合案例 2.插入查询结果 3.聚合函数 4.group by…

oracle数据库:约束

约束简介 约束是数据库用来确保数据满足业务规则的手段,不过在真正的企业开发中,除了主键约束这类具有强需求的约束,像外键约束,检查约束更多时候仅仅出现在数据库设计阶段,真实环境却很少应用,更多是放到…

[数据库]表的约束

●🧑个人主页:你帅你先说. ●📃欢迎点赞👍关注💡收藏💖 ●📖既选择了远方,便只顾风雨兼程。 ●🤟欢迎大家有问题随时私信我! ●🧐版权:本文由[你帅…

MySQL数据库,数据的约束

目录 1.数据的约束 1.1约束的类型 1.2NULL约束 1.3UNIQUE约束 1.4DEFAULT约束 1.5PRIMARY KEY约束 1.6FOREIGN KEY约束 1.数据的约束 首先,创建一个名为test的数据库: mysql> create database test charset utf8; Query OK, 1 row affected …

MySQL数据库(数据库约束)

目录 数据库约束 数据库约束的类型: null约束 : unique约束(唯一约束): default约束(默认值约束): primary key约束(主键约束): for…

数据库中的8种常见约束定义

数据库中常见约束的定义理解和应用(附代码) 首先来说数据库中约束的定义是什么? 约束定义:按照表中的数据规则,如果存在违反约束的数据行为,行为就会被阻止。 一般在创建表之后就会创建相关列的约束&#…

基础SQL第二课:约束

一、约束: 什么是约束? 为了确保表中的数据的完整性(准确性、正确性),为表添加一些限制。是数据库中表设计的一个最基本规则。使用约束可以使数据更加准确,从而减少冗余数据(脏数据)。 数据库完整性约束分…

sublime解决中文乱码问题

首先找到你选择的build-system,如下图所示: 第二步:找到preferences下的browse packages,点击进入目录 第三步:找到对应的.sublime-build文件 第四步:打开文件,将"env": {"LANG&…

sublime text 3211 安装中文包

sublime text 3211 安装中文包 安装步骤: 1、打开Sublime Text3,选择Preferences ->Package Contorol 2、在Sublime Text3 弹窗输入install package,选择对应命令,然后鼠标点击安装install package 3、等待一会Sublime Text3 的 insta…

Sublime 中文命名乱码(显示为方框)

今天在使用Sublime中发现,将文件名以部分文字以中文命名,非中文部分能正常显示,中文部分显示不出来。如下图所示 这里就是python能显示出来,其他的汉字就变成了方框。与此对应的现象还有部分文本的部分内容显示为繁体 &#xff0…

解决sublime汉化后部分中文显示为繁体字

解决sublime汉化后部分中文显示为繁体字 1. 问题描述2. 解决方法3. 修正之后的效果 1. 问题描述 使用插件下载汉化包之后,部门字体仍显示为繁体,如下图 这种字体看着实在是别扭的不行 2. 解决方法 找到首选项 -> 设置 添加以下内容 "font_o…

关于sublime中文上下跳动错位的解决方法

关于sublime中文上下跳动错位的解决方法 在preferences-settings打开 增加"font_options":[“gdi”] 对比效果如下:

Sublime text文本编辑器中文乱码解决方法

Sublime text 出现中文乱码的解决方法 问题描述 Sublime text文本编辑器用起来感觉挺好的,它的代码补全功能非常不错,界面也很漂亮。 最近在学习C语言,我感觉Dev-C的界面比较朴实,代码补全功能操作性太强。因此,我会…

Sublime Text3 中文错位解决办法

在使用prettytable库打印列表时偶然发现,相同的中英文混合字符串表格在Windoows控制台以及NotePad上能对齐显示,在SublimeText3以及EmEditor上无法对齐显示: Windoows控制台(能对齐显示): EmEditor&…