MySQL:数据库的约束

article/2025/9/28 4:15:15

目录

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(分组查询)


1.数据库约束

关系型数据库的一个重要功能,就是需要保证数据的完整性,正确的数据~

可以通过人工的方式来观察确认数据的正确性,可以,但是不合适,这个事情可能会导致人的疏忽,把一些错误没检查出来。

约束,就是让数据库帮助程序员更好的检查数据是否正确。

1.1 非空:not null

create table student(id int not null);

1.2 唯一:unique

unique 的作用:规定这个值是唯一的,不能重复出现

create table student(id int unique);

数据库如何判定,当前这一条记录是重复的呢?

数据库会先查找,再插入,但是加上约束之后,数据库的执行过程可能就变了,很可能执行时间、执行效率就受到很大影响,但是这里的代价再大,也比你手工检查一遍代价小很多,而且准确率也高很多。

1.3 默认值:default

和前面的约束条件一样,只需要在添加的元素后加上即可

默认值的生效:数据在插入的时候不给该字段赋值,就使用默认值

create table student(id int,name varchar(20) default '无名氏');

1.4 列描述:comment

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

1.5 主键约束:primary key

实际开发中,大部分的表,一般都会带有一个主键,主键往往是一个整数表示的id,比如int id

主键约束,就是同时拥有not null + unique的约束

主键同样是在插入记录的时候,需要先查询,再插入

正因为主键和unique都有先查询的过程,mysql就会默认给primary key和unique这样的列,自动添加索引,来提高查询的速度~

1.在MySQL中,一个表里只能有一个主键,不能有多个

2.虽然主键不能有多个,MySQL允许把多个列放到一起共同作为一个主键(联合主键)

3.自增主键:

create table student(id int primary key auto_increment);

Extra中有auto_increment代表这个就是自增主键

同时插入id的时候,可以手动指定,也可以不手动指定(null),后者会有mysql自动生成

同时自增主键,并不会重复利用中间的空隙,是依照之前的最大值来往后累加的

1.6 外键约束

外键约束是约束中较难的,因为涉及到两个表的约束。什么是外键约束呢?

表1记录了学生信息,表2记录了班级信息,但是要保证表2的班级信息和表1的学生信息对得上,就需要外键来约束,防止某个学生出现在不存在的班级的情况出现。

要想完成这样一个外键约束,该怎么做呢?

先创建父表:

 再创建子表:

 注意这条语句,这就是创建外键的语句,基本格式为:

foreign key (子表中需要被约束的元素) references 父表(父表中对应的列);

在这个案例中,代表着stu中的class_id要在myclass表中的id列中存在!

此时如果只有两个班级,那么插入30班的时候就会报错!

需要注意的点:

1.若要创建外键,那么父表中对应的列要有主键或者unique约束

2.当我们删除被外键约束的元素时,会提示删除失败,只有将父表和子表同时删除才能删除这个元素。

如何理解外键约束:

首先我们承认,这个世界是数据很多都是相关性的。 理论上,上面的例子,我们不创建外键约束,就正常建立学生表,以及班级表,该有的字段我们都有。 此时,在实际使用的时候,可能会出现什么问题? 有没有可能插入的学生信息中有具体的班级,但是该班级却没有在班级表中? 比如学校只开了1班,但是在上课的学生里面竟然有2班的学生(这个班目前并不存在),这很明显是有问题的。 因为此时两张表在业务上是有相关性的,但是在业务上没有建立约束关系,那么就可能出现问题。 解决方案就是通过外键完成的。建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。

1.7 综合案例

  • 有一个商店的数据,记录客户及购物情况,有以下三个表组成:
  • 商品goods(商品编号goods_id,商品名goods_name, 单价unitprice, 商品类别category, 供应商 provider)
  • 客户customer(客户号customer_id,姓名name,住址address,邮箱email,性别sex,身份证card_id)
  • 购买purchase(购买订单号order_id,客户号customer_id,商品号goods_id,购买数量nums)
  • 要求需要有:
  • 每个表的主外键
  • 客户的姓名不能为空值
  • 邮箱不能重复
  • 客户的性别(男,女)
  • create datebase mall;use mall;create table goods(goods_id int primary key auto_increment,goods_name varchar(32),unitprice int,category varchar(12),provider varchar(64)
    );create table customer(customer_id int primary key auto_increment,name varchar(32),address varchar(256),email varchar(64) unique key,sex enum('男','女') not null,card_id char(18) unique key
    );create tablepurchase(order_id int primary key auto_increment,customer_id int,goods_id int,nums int,foreign key (customer_id) references customer(customer_id),foreign key (goods_id) references goods(goods_id)
    );

2.插入查询结果

在SQL中,还可以把查询的结果,插入到另一个表中~

insert into (student1) select * from student2;

在这个例子中,就是把student2插入到了student1中

同时要求student2和student1 列数和列的类型要匹配~

3.聚合函数

聚合查询本质上是在行与行之间进行运算,通常我们用SQL中的内置函数来完成:

同时这些操作都是针对某个列的所有行来进行运算的

 eg:count (返回查询到的数据的数量)

select count(*) from exam_result;

这个操作就相当于先进行select*,然后针对返回的结果,再进行count运算,求结果集合的行数

4.group by(分组查询)

在select中使用group by 子句可以对指定列进行分组查询

现在有这样的一群数据:

 现在要求算平均工资:

 但是我们可以发现,所有人的平均工资都被平均下来了,参考价值不大,我们需要的是程序员的平均工资,这个时候我们就需要用到group by来对role这一个条件进行分类:

这样我们就能得到程序员和老板分别的平均工资,这也就是group by 的用法~

把某一列,相同的行分成一组,再进行下一步计算,并且group by 默认是升序排序。

having和group by配合使用 对group by结果进行过滤

select avg(sal) as myavg from EMP group by deptno having myavg<2000;

--having经常和group by搭配使用,作用是对分组进行筛选,作用有些像where。

本章完~


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

相关文章

oracle数据库:约束

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

[数据库]表的约束

●&#x1f9d1;个人主页:你帅你先说. ●&#x1f4c3;欢迎点赞&#x1f44d;关注&#x1f4a1;收藏&#x1f496; ●&#x1f4d6;既选择了远方&#xff0c;便只顾风雨兼程。 ●&#x1f91f;欢迎大家有问题随时私信我&#xff01; ●&#x1f9d0;版权&#xff1a;本文由[你帅…

MySQL数据库,数据的约束

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

MySQL数据库(数据库约束)

目录 数据库约束 数据库约束的类型&#xff1a; null约束 &#xff1a; unique约束&#xff08;唯一约束&#xff09;&#xff1a; default约束&#xff08;默认值约束&#xff09;&#xff1a; primary key约束&#xff08;主键约束&#xff09;&#xff1a; for…

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

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

基础SQL第二课:约束

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

sublime解决中文乱码问题

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

sublime text 3211 安装中文包

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

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

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

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

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

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

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

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

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

Sublime Text3 中文错位解决办法

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

sublime离线插件安装

一、首先需要安装Package Control 参考官网&#xff1a;Installation - Package Control中的方法。 其中分联网自动下载安装和手动两种。本文介绍手动的。 Click the Preferences > Browse Packages… menuBrowse up a folder and then into the Installed Packages/ fold…

解决 Sublime Text 中文样式显示异常问题

目录 一、问题背景 二、问题解决 1&#xff09;在工具栏中选择 Preferences → Settings &#xff0c;打开配置文件 2&#xff09;在右侧界面添加下方代码块中的内容&#xff0c; CtrlS 保存 三、效果展示 一、问题背景 最近在单位的Mac系统中使用Sublime Text感觉良好&a…

sublime text里面中文字体显示异常解决方案

sublime text下载之后一开始转成中文之后&#xff0c;会出现中文显示异常的问题&#xff0c;比如下图中“门”字显示异常 通过如下的设置可以解决该问题&#xff1a; 首选项--》设置 在该位置添加如下内容&#xff1a; {"font_options": ["gdi"],"dp…

Linux sublime设置中文,Sublime Text 3 设置为Ubuntu 14.04默认编辑器并支持中文

Ubuntu 14.04下设置Sublime Text 3支持中文输入 发现Sublime Text不支持中文&#xff0c;我用的是Fctix&#xff0c;查了好长时间教程搞定了&#xff0c;在此分享并记录下&#xff0c;最后附上本次所需文件的下载地址。 1、 复制如下的代码为sublime_imfix.c文件并放到sublime_…

sublime匹配汉字

需要处理的文本 GET/aaa/v1/xxx【门户】获取商机列表信息 POST/aaa/v1/xxx创建商机接口 POST/aaa/v1/xxx/approve审核渠道报备商机 GET/aaa/v1/xxx/areaSales根据区域编码获取对应的销售负责人(渠道经理) POST/aaa/v1/xxx/assign分派渠道报备商机 POST/aaa/v1/xxx/convert/ord…

解决SublimeText中文注释乱码

在使用Sublime Text过程中&#xff0c;出现文件中中文呈现乱码的情况 解决&#xff1a;安装Package Control --> 安装插件ConvertToUTF8 1. 安装Package Control 1&#xff09;Preferences --> Browse Packages&#xff0c;进入打开上层目录&#xff0c;选择Installed…

Sublime 打开文件中文乱码

解决步骤&#xff1a; 1. Ctrl Shift P 打开命令行 2. 输入install Package Control &#xff0c;点击进行安装 3. CTRLSHIFTP > 安装 Install Package 4. Install Package 安装完毕后&#xff0c;在弹出的命令行&#xff0c;输入ConvertToUTF8&#xff0c;点击进行安装…