MySQL数据库 数据库基本操作(三):表的增删查改(中)

news2024/10/7 13:16:50

1. 数据库的约束

1.1 约束类型(一般发生于表的创建中)

  • NOT NULL - 指示某列不能存储 NULL 值
  • UNIQUE - 保证某列的每行必须有唯一的值
  • DEFAULT - 规定没有给列赋值时的默认值
  • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录
  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性
  • CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。(8之后的版本支持)

1.2 null约束

创建表的时候,可以指定某列不为空.
create table student (id int not null , sn int ,name varchar(5),qq_mail varchar(20));
创建一个学生表,规定id一列不可以为空.
在这里插入图片描述

1.3 unique约束

create table student (id int not null , sn int unique ,name varchar(5),qq_mail varchar(20));
创建一个学生表,规定sn一列为唯一的,不重复的.
在这里插入图片描述

1.4 default约束

create table student (id int not null , sn int unique ,name varchar(10) default 'unknown' ,qq_mail varchar(20));
创建一个表,name一列默认为unknown;
在这里插入图片描述
[注意]: 在默认值的上面要加上’ '表示字符串

1.5 primary key约束–>主键约束

create table student (id int primary key , sn int unique ,name varchar(10) default 'unknown' ,qq_mail varchar(20) );

指定id为主键
在这里插入图片描述
对于整数类型的主键,通常搭配自增长auto_increment来使用,插入对应数据对应字段不给值时(如给null),使用最大值+1.

create table student (id int primary key auto_increment , sn int unique ,name varchar(10) default 'unknown' ,qq_m ail varchar(20));

在这里插入图片描述
[注意] 每个表的主键只可以有一个.

1.6 foreign key–>外键约束

外键用于关联其他表的主键或者是唯一键.(关联的必须是使用primary key修饰的列或者unique修饰的列)
语法:
foreign key (字段名) reference 主表(列)
案例:

  • 创建班级表,id为主键.

create table class (id int primary key,name varchar(10));

在这里插入图片描述
创建班级表student , 一个学生对应一个班级,一个班级对应多个学生,使用id为主键,class_id为外键,关联班级表id.
create table student (id int primary key ,name varchar(10),class_id int ,foreign key (class_id) references class( id));

在这里插入图片描述
[注意]

  • 加外键的表称为子表,使用外键关联的表称为父表.
  • 在创建外键的时候,和主键的创建方式不一样,它的创建在所有列的最后,且要指定子表中的列和父表和父表中的列.
  • foreign拼写要正确,references注意不要少加s.
  • 关联之后,父表会对子表产生约束作用,下面进行举例.
 insert into class values(1, 'java 1');
 insert into student values(1, '张三' ,2);

在这里插入图片描述
在这里,我们可以看到,我们指定student的班级id为2,但是班级id为2的班级在父表中不存在,所以插入不成功.

  • 关联之后,子表也会对父表产生一定的制约,下面进行举例.
insert into student values(1,'张三',1);
insert into class values(2,'java 2');
delete from class where id=1;
delete from class where id=2;

在这里插入图片描述
在上图中我们看到在删除class表中id为1的行时候,删除失败,而删除id为2的时候删除成功,是因为子表student存在class_id为1的学生,所以不可以删除.

2. 表的设计

三大范式:

  1. 一对一
    在这里插入图片描述
  2. 一对多
    在这里插入图片描述
    就像我们在上面展示外键案例的时候,学生和班级之间的关系就是一对多,一个学生只可以属于一个班级,但是一个班级中可以有多个学生.
  3. 多对多
    在这里插入图片描述
 create table course (id int primary key,name varchar(10));
 create table student_course (student_id int , course_id int ,foreign key (student_id) references student(id),foreign key (course_id) references course(id));

我们在课程表和学生表之间创建一个中间表,叫student_course表,把学生和课程关联起来,这个表插入的元素取决于一个课程都被哪些同学选择,或者是一个学生都选择哪些课程.

3. 新增–>insert

插入查询结果,也就是把另一个表中所查询到的数据复制过来.
语法:
insert into 表名 (列名) select …
案例:把student的id和name数据复制到新建的student2中

create table student2 (id int primary key , name varchar(10),class_id int);
insert into student2 (id,name) select id,name from student;
select * from student2;

在这里插入图片描述
这里我们看到,student中的两列数据被成功地插入了student2这张表中.这里需要注意的一点是,前面insert插入操作的时候,列名要加括号,在后面select操作的时候,列名不需要加括号,还有插入表中的数据要和查询出来的数据类型相吻合.

4. 查询–>select

4.1 聚合查询

4.1.1 聚合函数

常见的统计总数,计算平均值等都可以用聚合函数来实现.常见的聚合函数如下:

函数说明
COUNT([DISTINCT] expr)返回查询到的数据的 数量
SUM([DISTINCT] expr)返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT] expr)返回查询到的数据的 平均值,不是数字没有意义
MAX([DISTINCT] expr)返回查询到的数据的 最大值,不是数字没有意义
MIN([DISTINCT] expr)返回查询到的数据的 最小值,不是数字没有意义

案例:

  • count
    select count(*) from emp;
    在这里插入图片描述
    这里我们看到总共有八个人,count(*)返回的值就是8
    当然也可以对查询加上限制条件:
    select count(*) from emp where role='测试工程师';
    在这里插入图片描述
    我们看到,测试工程师一共有三人.
  • sum
    select sum(salary) from emp;
    统计所有人的薪资总和.
    在这里插入图片描述
    也可以令别名
    select sum(salary) as total from emp;
    在这里插入图片描述
    我们看到,表头被改为了total.
    也可以加入限制条件.
    select sum(salary) as total from emp where role='java工程师';
    在这里插入图片描述
    上述返回的就是所有java工程师的工资总和.

[注意]
sum中所包含的列一定是可加和的对象,如果说包含不可加和对象,则不会计入总和中.原理就是:在MySQL拿到一个不可直接运算的类型的时候,如字符串类型,sql会先尝试转化为double类型数据,若转换失败,则该数据不参与运算,并报出警告.

  • avg
    select avg(salary) from emp;
    统计所有人工资的平均值.
    在这里插入图片描述

  • max
    select max(salary) from emp;
    返回工资最高的人.
    在这里插入图片描述

  • min
    select min(salary) from emp;
    返回工资最少的人
    在这里插入图片描述

4.1.2 group by子句

select中使用group by子句可以对指定的列进行分组查询
语法:
select 列名,聚合函数(列名)… from table group by 列名
select role,avg(salary) from emp group by role;
计算各个岗位的平均工资.
在这里插入图片描述
这么看比较一整句话有些抽象,我们把这句话拆开来看,我们来分析它的执行逻辑:

  1. 先执行select role,salary from emp;查找出表中所有的结果.
  2. 再执行group by role,对查找出的结果进行分组.
  3. 再执行聚合函数,把avg(salary)带入每个分组进行计算.

可以再对薪资进行排序:
select role,avg(salary) from emp group by role order by avg(salary);
在这里插入图片描述
[注意]
select指定的字段必须为"分组的依据字段",其他字段要想出现在select语句中,必须使用聚合函数.否则返回的数据就是无意义的数据.
select name,role,avg(salary) from emp group by role;
在这里插入图片描述
这里我们看到,name一列返回的数据是没有任何规律的,是分组中随机的值.

4.1.3 having

group by 子句对结果进行分组之后,需要对分组之后的结果进行过滤,此时不可以使用where语句,要使用having语句.
select role,avg(salary) as avg from emp group by role having avg>=13000;
显示平均工资大于13000的岗位.

在这里插入图片描述
此时我们看到,大于13000的岗位有java和c++.

[辨析]使用having限制和使用where限制
在使用having限制的时候,是对分组之后的结果进行过滤,比如上面的例子,而使用where是对分组之前的结果进行遍历.下面来举一个where的例子.
select role,avg(salary) as avg from emp where name!= '张三' group by role;
计算各个岗位的平均工资,但是不包含张三.

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1570737.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【CSS】浮动笔记及案例

CSS浮动 1. 认识浮动 float属性可以指定一个元素沿着左侧或者是右侧放置,允许文本和内联元素环绕它 float属性最初只使用文字环绕图片但却是早起CSS最好用的左右布局方案 绝对定位、浮动都会让元素脱标,以达到灵活布局的目的可以通过float属性让元素脱…

FTP,NFS,SSH服务安装和应用,遇到的问题

文章目录 一、FTP是什么?二、NFS是什么?三、SSH是什么?四、FTP,NFS,SSH安装(Ubuntu 操作系统)1.FTP安装2.NFS安装3.SSH服务安装 五、FTP,NFS,SSH应用1.FTP应用12.FTP应用23.NFS应用4.SSH应用 六…

【快速解决】python缺少了PyQt5模块的QtMultimedia子模块

目录 问题描述 问题原因 解决方法 成功示范 问题描述 Traceback (most recent call last): File "d:\桌面\python项目\DesktopWords-master\main.py", line 4, in <module> from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent ModuleNotFoundEr…

动态规划刷题(算法竞赛、蓝桥杯)--线段(线性DP)

1、题目链接&#xff1a;P3842 [TJOI2007] 线段 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include <bits/stdc.h> using namespace std; const int N20010; int a[N][2],f[N][2]; //a[i][0]表示l[i],a[i][1]表示r[i] int dis(int a,int b){return abs(a-b); } int…

计算机网络-HTTP相关知识-基础

HTTP基础 基本概念&#xff1a;HTTP是一种计算机之间交流通信的规范&#xff0c;它允许数据在两点之间传输&#xff0c;这个过程可以包括中转或接力。HTTP不仅仅包括文本&#xff0c;还可以包括图片、音频等超文本。状态码&#xff1a;HTTP状态码分为五类&#xff1a; 2xx&…

12-项目部署_持续集成

项目部署_持续集成 1 今日内容介绍 1.1 什么是持续集成 持续集成&#xff08; Continuous integration &#xff0c; 简称 CI &#xff09;指的是&#xff0c;频繁地&#xff08;一天多次&#xff09;将代码集成到主干 持续集成的组成要素 一个自动构建过程&#xff0c; 从…

BLE协议—HID

BLE协议—HID HID设备HOGP&#xff08;HID Over GATT Profile&#xff09;HID服务HID infoHID ModeHID ReportHID MAP HID设备 HID&#xff08;Human Interface Device&#xff0c;人机接口设备&#xff09;是USB设备中常用的设备类型&#xff0c;是直接与人交互的USB设备&…

PostgreSQL 文章下架 与 热更新和填充可以提升数据库性能

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;…

keycloak - 鉴权VUE

目录 一、前言 1、背景 2、实验版本 二、开始干活 1、keycloak配置 a、创建领域(realms) b、创建客户端 c、创建用户、角色 2、vue代码 a、依赖 b、main.js 三、未解决的问题 目录 一、前言 1、背景 2、实验版本 二、开始干活 1、keycloak配置 a、创建领域(r…

常见的数据库操作

一、查看数据库及表 1.查看当前 DMBS 中有哪些数据库 show databases; (首先进入数据库) 2.查看当前数据库中有哪些表 show tables; 3.查看表的结构&#xff08;信息&#xff09; describe 表名;如&#xff1a;describe orders; 二、创建删除数据库 1.创建数据库 create databa…

三栏布局——面试/笔试题

目录 三栏布局(两端指定宽度&#xff0c;中间自适应)三栏布局(平均分布) 三栏布局(两端指定宽度&#xff0c;中间自适应) 只介绍简单的写法&#xff0c;圣杯布局之类的比较复杂&#xff0c;实际上越简单越好&#xff0c;所以复杂的就不介绍了 flex布局 <!DOCTYPE html>…

博客搭建(hexo+github)

简介 搭建完成网站的如下所示 https://polarday.top/ 使用github托管博客&#xff0c;完全免费不需要购买服务器 博客框架&#xff1a;hexo hexo主题&#xff1a;ICARUS 图床&#xff1a;githubPicGo 编辑&#xff1a;vscode 为什么使用hexo框架&#xff1f;因为hexo是静态框…

阿里云99元服务器性能测评_CPU内存_带宽_系统盘

阿里云服务器99元一年配置为云服务器ECS经济型e实例&#xff0c;2核2G配置、3M固定带宽和40G ESSD Entry系统盘&#xff0c;新用户和老用户均可买&#xff0c;续费不涨价依旧是99元一年&#xff0c;阿里云服务器网aliyunfuwuqi.com来详细说下阿里云99元服务器性能测评&#xff…

opencv使用问题记录一二

opencv介绍 opencv是一个计算机视觉处理软件库&#xff0c;拥有强大的功能和高效的性能。 但是由于早期版本的原因&#xff0c;存在一些与目前主流使用不兼容的问题 问题与解决 RGB通道顺序 一般图片处理类库的通道顺序就是RGB&#xff0c;但是opencv的是反过来的&#xf…

OpenCV入门例程:裁剪图片、模糊检测、黑屏检测

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 本例程运行环境为CentOS7&…

vLLM介绍

vLLM是伯克利大学LMSYS组织开源的大语言模型高速推理框架&#xff0c;旨在极大地提升实时场景下的语言模型服务的吞吐与内存使用效率。vLLM是一个快速且易于使用的库&#xff0c;用于 LLM 推理和服务&#xff0c;可以和HuggingFace 无缝集成。vLLM利用了全新的注意力算法「Page…

SimpleMind Pro 2.3.4中文激活版 思维导图

SimpleMind是一款设计精美、功能齐全的跨平台思维导图软件。它是一个功能强大的优秀的软件工具&#xff0c;可用于头脑风暴的跨平台思维导图。当你和你的朋友坐在一起讨论不同的想法时&#xff0c;你可以很容易地记录下它们&#xff0c;并随时修改它们。思维导图可以帮助你思考…

win10电脑无线网卡优化

近期win10会频繁断网&#xff0c;无任何规律。目前整理搜索后使用以下两种方法优化网卡&#xff0c;更改配置后断网问题得到有效改善。 方法一&#xff1a;在【电源管理】中取消勾选【允许计算机关闭此设备以节约电源】 方法二&#xff1a;【Preferred enable】修改为prefer 5…

c# wpf style 简单试验

1.概要 wpf style 用来控制控件的样式 2.代码 <Window x:Class"WpfApp2.Window5"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.…

Linux操作系统之防火墙、redis安装

目录 一、防火墙 1、防火墙的类别 2、安装iptables(四表五链&#xff09; 一、防火墙 1、防火墙的类别 安全产品 杀毒 针对病毒&#xff0c;特征篡改系统中文件杀毒软件针对处理病毒程序 防火墙 针对木马&#xff0c;特征系统窃密 防火墙针对处理木马 防火墙分为两种 硬件…