当前位置: 首页 > news >正文

MySQL数据库3——函数与约束

一.函数

1.字符串函数

MySQL中内置了很多字符串函数,常用的几个如下:

在这里插入图片描述

使用方法:

SELECT 函数名(参数);

注意:MySQL中的索引值即下标都是从1开始的。

2.数值函数

常见的数值函数如下:

在这里插入图片描述

使用方法:

SELECT 函数名(参数);

3.日期函数

常见的日期函数如下:
在这里插入图片描述

注意:

  • datediff函数计算用的是第一个时间减去第二个时间,所以尽量让大的时间放在第一个,否则出来的结果是负数
  • date_add中间的关键字interval必不可少,例如select date_add(now(),interval 2 day);

4.流程函数

流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。

在这里插入图片描述

注意:始终要记住函数在查询语句中的使用位置。

在这里插入图片描述

二.约束

1.概述

概念:约束是作用于表中字段上的规则,用来限制存储在表中的数据

目的:保证数据库中数据的正确、有效和完整

分类:

约束描述关键字
非空约束限制该字段的数据不能为nullNOT NULL
唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE
主键约束主键是一行数据的唯一标识,要求非空且唯一PRMARY KEY
默认约束保存数据,如果未指定该字段值,则采用默认值DEFAULT
检查约束保证字段满足某一条件CHECK
外键约束用来让两个表的数据建立连接,保证数据一致和完整FOREIGN KEY

注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

2.约束演示

在这里插入图片描述

要完成上述表的建立:

create table worker(id int primary key auto_increment comment '主键',name varchar(10) not null unique comment '姓名',age int check(age>0 && age<=120) comment '年龄',status char(1) default '1' comment '状态',gender char(1) comment '性别'
)comment '员工表';

3.外键约束

添加外键语法:

CREATE TABLE 表名(字段名 数据类型,……[CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)
)
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名);

这里添加外键一直报错,说一下注意事项:

  • 首先外键关联的父表与子表的字段类型保持一致
  • 如果表中已经有数据,请保证子表中对应字段的数据在父表对应的数据范围内。

删除外键:

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

当删除外键父表中的对应字段时,如果存在对应的映射关系,删除记录则会失败。

删除/更新行为:

在这里插入图片描述

语法:

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名) ON UPDATE CASCADE ON DELETE CASCADE;

三.多表查询

在上一节简单介绍了多表查询,现在直接详细深入一下学习。

1.多表关系

​ 项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所
以各个表结构之间也存在着各种联系,基本上分为三种:

  • 一对多(多对一)
  • 多对多
  • 一对一

一对多:

案例:部门与员工的关系
关系:一个部门对应多个员工,一个员工对应一个部门
实现:在多的关系表建立外键,指向一的关系表的主键

多对多:

案例:学生与 课程的关系
关系:一个学生可以选修多门课程,一门课程也可以供多个学生选择
实现:建立第三张中间表(SC),中间表至少包含两个外键,分别关联两方主键(S#,C#)

一对一:

案例:用户与用户详情的关系
关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率
实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)

2.概述

多表查询分类:

  • 连接查询

    • 内连接:相当于查询A、B交集部分数据

    • 外连接:

      • 左外连接:查询左表所有数据,以及两张表交集部分数据
      • 右外连接:查询右表所有数据,以及两张表交集部分数据
    • 自连接:当前表与自身的连接查询,自连接必须使用表别名

  • 子查询

多表查询分为两个大类:连接查询和子查询,其中连接查询在上一节我们接触过。

3.连接查询-内连接

内连接查询的是两张表交集的部分;

隐式内连接:

SELECT 字段列表 FROM1,2 WHERE 条件……;

显示外连接:

SELECT 字段列表 FROM1 [INNER] JOIN2 ON 连接条件;

注意:在多表查询时,我们经常使用起别名的方式简化操作,但起别名后,我们不能再通过原来的表名访问字段。

4.连接查询-外连接

左外连接:

SELECT 字段列表 FROM1 LEFT [OUTER] JOIN2 ON 条件……;

右外连接:

SELECT 字段列表 FROM1 RIGHT [OUTER] JOIN2 ON 条件……;

左连接会包含坐标的所有数据,右连接会包含右表的所有数据,具体效果实操就知道了。

5.连接查询-自连接

语法:

SELECT 字段列表 FROM 表名 别名1 JOIN 表名 别名2 ON 条件……;

自连接的连接方式可以是内连接也可以是外连接。

6.联合查询

对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。

SELECT 字段列表 FROM 表A……
UNION [ALL]
SELECT 字段列表 FROM 表B……;

这里的all选项是(假设第一个查询结果和第二个查询结果有交集)是否对其进行去重,保留代表不去重,没有all代表去重。

对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。

7.子查询

SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询

子查询外部的语句可以是INSERT / UPDATE / DELETE / SELECT 的任何一个

四.多表查询练习

1.案例一

  1. 查询员工的姓名、年龄、职位、部门信息 (隐式内连接)

    select e.name , e.age , e.job , d.name from emp e , dept d where e.dept_id = d.id;
    
  2. 查询年龄小于30岁的员工的姓名、年龄、职位、部门信息(显式内连接)

    select e.name , e.age , e.job , d.name from emp e inner join dept d on e.dept_id = d.id where e.age < 30;
    
  3. 查询拥有员工的部门ID、部门名称

    select distinct d.id , d.name from emp e , dept d where e.dept_id = d.id;
    
  4. 查询所有年龄大于40岁的员工, 及其归属的部门名称; 如果员工没有分配部门, 也需要展示出来

    select e.*, d.name from emp e left join dept d on e.dept_id = d.id where e.age > 40 ;
    
  5. 查询所有员工的工资等级

    select e.* , s.grade , s.losal, s.hisal from emp e , salgrade s where e.salary between s.losal and s.hisal;
    

2.案例2

  1. 查询 “研发部” 所有员工的信息及 工资等级

    select e.* , s.grade from emp e , dept d , salgrade s where e.dept_id = d.id and ( e.salary between s.losal and s.hisal ) and d.name = '研发部';
    
  2. 查询 “研发部” 员工的平均工资

    select avg(e.salary) from emp e, dept d where e.dept_id = d.id and d.name = '研发部';
    
  3. 查询工资比 “灭绝” 高的员工信息。

-- a. 查询 "灭绝" 的薪资
select salary from emp where name = '灭绝';-- b. 查询比她工资高的员工数据
select * from emp where salary > ( select salary from emp where name = '灭绝' );
  1. 查询比平均薪资高的员工信息

    -- a. 查询员工的平均薪资
    select avg(salary) from emp;-- b. 查询比平均薪资高的员工信息
    select * from emp where salary > ( select avg(salary) from emp );
    
  2. 查询低于本部门平均工资的员工信息

```sql
select * from emp e2 where e2.salary < ( select avg(e1.salary) from emp e1 where e1.dept_id = e2.dept_id );
```
  1. 查询所有学生的选课情况, 展示出学生名称, 学号, 课程名称

    -- 表: student , course , student_course
    -- 连接条件: student.id = student_course.studentid , course.id = student_course.courseidselect s.name , s.no , c.name from student s , student_course sc , course c where s.id = sc.studentid and sc.courseid = c.id ;
    

五.事务

1.事务理解

事务:是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败

默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。

2.事务操作

查看/设置事务提交方式:

SELECT @@autocommit;                     -- 用来查看事务的提交方式
SET @@AUTOCOMMIT=0;

第一句用来查看事务的提交方式,如果自动提交就返回1,手动提交就返回0;第二句把提交方式设置为手动提交。

提交事务:

COMMIT;

回滚事务:

ROLLBACK

除了这一种方式以外,我们还有另一种方式进行事务操作

START TRANSACTIONBEGIN;

这种方式并没有修改事务的提交方式

3.事务特性-ACID

事务四大特性:

  • 原子性 (Atomicity): 事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态
  • 隔离性(lsolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
  • 持久性(Durability): 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

4.并发事务问题

问题描述
脏读一个事务读到另一个事务还没有提交的数据
不可重复读一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读
幻读一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”

5.隔离级别

√表示会出线对应的问题,×表示解决了对应的问题。

查看失去隔离级别:

SELECT @@TRANSACTION_ISOLATION;

设置事务隔离级别:

SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE};
  • 选项:SESSION表示仅针对当前窗口有效,GLOBAL表示针对所有窗口有效;

相关文章:

MySQL数据库3——函数与约束

一.函数 1.字符串函数 MySQL中内置了很多字符串函数&#xff0c;常用的几个如下&#xff1a; 使用方法&#xff1a; SELECT 函数名(参数);注意&#xff1a;MySQL中的索引值即下标都是从1开始的。 2.数值函数 常见的数值函数如下&#xff1a; 使用方法&#xff1a; SELECT…...

⾃动化运维利器 Ansible-Jinja2

Ansible-Jinja2 一、Ansible Jinja2模板背景介绍二、 JinJa2 模板2.1 JinJa2 是什么2.2 JinJa2逻辑控制 三、如何使用模板四、实例演示 按顺序食用&#xff0c;口味更佳 ( 1 ) ⾃动化运维利器Ansible-基础 ( 2 ) ⾃动化运维利器 Ansible-Playbook ( 3 ) ⾃动化运维利器 Ansible…...

博客文章怎么设计分类与标签

首发地址&#xff08;欢迎大家访问&#xff09;&#xff1a;博客文章怎么设计分类与标签 新网站基本上算是迁移完了&#xff0c;迁移之后在写文章的过程中&#xff0c;发现个人的文章分类和标签做的太混乱了&#xff0c;分类做的像标签&#xff0c;标签也不是特别的丰富&#x…...

FastDDS之DataSharing

目录 原理说明限制条件配置Data-Sharing delivery kindData-sharing domain identifiers最大domain identifiers数量共享内存目录 DataReader和DataWriter的history耦合DataAck阻塞复用 本文详细记录Fast DDS中Data Sharing的实现原理和代码分析。 DataSharing的概念&#xff1…...

计算机网络在线测试-概述

单项选择题 第1题 数据通信中&#xff0c;数据传输速率&#xff08;比特率&#xff0c;bps&#xff09;是指每秒钟发送的&#xff08;&#xff09;。 二进制位数 &#xff08;我的答案&#xff09; 符号数 字节数 码元数 第2题 一座大楼内的一个计算机网络系统&#xf…...

【MySQL】数据库必考知识点:查询操作全面详解与深度解剖

前言&#xff1a;本节内容讲述基本查询&#xff0c; 基本查询要分为两篇文章进行讲解。 本篇文章主要讲解的是表内删除数据、查询结果进行插入、聚合统计、分组聚合统计。 如果想要学习对应知识的可以观看哦。 ps:本篇内容友友们只要会创建表了就可以看起来了哦&#xff01;&am…...

鲸鱼机器人和乐高机器人的比较

鲸鱼机器人和乐高机器人各有其独特的优势和特点&#xff0c;家长在选择时可以根据孩子的年龄、兴趣、经济能力等因素进行综合考虑&#xff0c;选择最适合孩子的教育机器人产品。 优势 鲸鱼机器人 1&#xff09;价格亲民&#xff1a;鲸鱼机器人的产品价格相对乐高更为亲民&…...

游戏引擎学习第15天

视频参考:https://www.bilibili.com/video/BV1mbUBY7E24 关于游戏中文件输入输出&#xff08;IO&#xff09;操作的讨论。主要分为两类&#xff1a; 只读资产的加载 这部分主要涉及游戏中用于展示和运行的只读资源&#xff0c;例如音乐、音效、美术资源&#xff08;如 3D 模型和…...

详解模版类pair

目录 一、pair简介 二、 pair的创建 三、pair的赋值 四、pair的排序 &#xff08;1&#xff09;用sort默认排序 &#xff08;2&#xff09;用sort中的自定义排序进行排序 五、pair的交换操作 一、pair简介 pair是一个模版类&#xff0c;可以存储两个值的键值对.first以…...

AI驱动的桌面笔记应用Reor

网友 竹林风 说&#xff0c;已经成功的用 mxbai-embed-large 映射到 text-embedding-ada-002&#xff0c;并测试成功了。不愧是爱折腾的人&#xff0c;老苏还没时间试&#xff0c;因为又找到了另一个支持 AI 的桌面版笔记 Reor Reor 简介 什么是 Reor ? Reor 是一款由人工智…...

搜维尔科技:使用sensglove触觉反馈手套进行虚拟拆装操作

使用sensglove触觉反馈手套进行虚拟拆装操作 搜维尔科技&#xff1a;使用sensglove触觉反馈手套进行虚拟拆装操作...

深入理解电子邮件安全:SPF、DKIM 和 DMARC 完全指南

引言 在当今数字时代&#xff0c;电子邮件已经成为我们日常通信中不可或缺的一部分。然而&#xff0c;随之而来的安全问题也日益突出。邮件欺诈、钓鱼攻击和垃圾邮件等威胁不断增加&#xff0c;这促使了多种邮件安全验证机制的出现。本文将深入探讨三个最重要的邮件安全协议&a…...

【有啥问啥】复习一下什么是NMS(非极大值抑制)?

复习一下什么是NMS&#xff08;非极大值抑制&#xff09;&#xff1f; 什么是NMS&#xff1f; NMS&#xff08;Non-Maximum Suppression&#xff09;即非极大值抑制&#xff0c;是一种在计算机视觉领域&#xff0c;尤其是目标检测任务中广泛应用的后处理算法。其核心思想是抑…...

Java-异步方法@Async+自定义分布式锁注解Redission

如果你在使用 @Async 注解的异步方法中,使用了自定义的分布式锁注解(例如 @DistributedLock),并且锁到期后第二个请求并没有执行,这可能是由于以下几个原因导致的: 锁的超时时间设置不当:锁的超时时间可能设置得太短,导致锁在业务逻辑执行完成之前就已经自 动释放。…...

基本定时器---内/外部时钟中断

一、定时器的概念 定时器&#xff08;TIM&#xff09;&#xff0c;可以对输入的时钟信号进行计数&#xff0c;并在计数值达到设定值的时候触发中断。 STM32的定时器系统有一个最为重要的结构是时基单元&#xff0c;它由一个16位计数器&#xff0c;预分频器&#xff0c;和自动重…...

实现了两种不同的图像处理和物体检测方法

这段代码实现了两种不同的图像处理和物体检测方法&#xff1a;一种是基于Canny边缘检测与轮廓分析的方法&#xff0c;另一种是使用TensorFlow加载预训练SSD&#xff08;Single Shot Multibox Detector&#xff09;模型进行物体检测。 1. Canny边缘检测与轮廓分析&#xff1a; …...

如何在MindMaster思维导图中制作PPT课件?

思维导图是一种利用色彩、图画、线条等图文并茂的形式&#xff0c;来帮助人们增强知识或者事件的记忆。因此&#xff0c;思维导图也被常用于教育领域&#xff0c;比如&#xff1a;教学课件、读书笔记、时间管理等等。那么&#xff0c;在MindMaster免费思维导图软件中&#xff0…...

ORIN NX 16G安装中文输入法

刷机版本为jetpack5.14.刷机之后预装了cuda、cudnn、opencv、tensorrt等&#xff0c;但是发现没有中文输入&#xff0c;所以记录一下安装流程。 jetson NX是arm64架构的&#xff0c;sougoupinyin只支持adm架构的&#xff0c;所以要选择安装Google pinyin 首先打开终端&#x…...

【金融风控项目-07】:业务规则挖掘案例

文章目录 1.规则挖掘简介2 规则挖掘案例2.1 案例背景2.2 规则挖掘流程2.3 特征衍生2.4 训练决策树模型2.5 利用结果划分分组 1.规则挖掘简介 两种常见的风险规避手段&#xff1a; AI模型规则 如何使用规则进行风控 **使用一系列逻辑判断(以往从职人员的经验)**对客户群体进行区…...

退款成功订阅消息点击后提示订单不存在

问题表现&#xff1a; 退款成功发送的小程序订阅消息点击进入后提示订单不存在。 修复方法&#xff1a; 1.打开文件app/services/message/notice/RoutineTemplateListService.php 2.找到方法sendOrderRefundSuccess 3.修改图中红圈内的链接地址 完整方法代码如下 /*** 订…...

实验一 顺序结构程序设计

《大学计算机&#xfe63;C语言版》实验报告 实验名称 实验一 顺序结构程序设计 实验目的 &#xff08;1&#xff09;掌握C语言中常量和变量的概念。 &#xff08;2&#xff09;掌握C语言中常见的数据类型。 &#xff08;3&#xff09;掌握C语言中变量的定义和赋值方法。 …...

Elasticsearch搜索流程及原理详解

Elasticsearch搜索流程及原理详解 1. Elasticsearch概述1.1 简介1.2 核心特性1.3 应用场景2. Elasticsearch搜索流程2.1 搜索请求的发起2.2 查询的执行2.3 结果的聚合与返回3. Elasticsearch原理详解3.1 倒排索引3.2 分布式架构3.3 写入流程3.4 读取流程4. 技术细节与操作流程4…...

芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号)

芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号) 本期是平台君和您分享的第113期内容 前一段时间,高通公司(Qualcomm)发布安全警告称,提供的60多款芯片潜在严重的“零日漏洞”,芯片安全再一次暴露在大众视野。 那什么是“零日漏洞”?平台君从网上找了一段…...

【gitlab】gitlabrunner部署

1、下载镜像 docker pull gitlab/gitlab-runner:latest 2、启动gitrunner容器 docker run -d --name gitlab-runner --restart always \ -v /root/gitrunner/config:/etc/gitlab-runner \ ///gitlab-runner的配置目录&#xff0c;挂载在宿主机上方便修改,里面有config.…...

Flink监控checkpoint

Flink的web界面提供了一个选项卡来监控作业的检查点。这些统计信息在任务终止后也可用。有四个选项卡可以显示关于检查点的信息:概述(Overview)、历史(History)、摘要(Summary)和配置(Configuration)。下面依次来看这几个选项。 Overview Tab Overview选项卡列出了以…...

Ribbon 入门实战指南

Ribbon 是 Netflix 开发的一个开源项目&#xff0c;用于实现客户端负载均衡功能。它在微服务架构中广泛使用&#xff0c;并且是 Spring Cloud 生态中的重要组成部分。本文将带你从基础入门&#xff0c;逐步掌握如何在 Spring Cloud 项目中使用 Ribbon 实现客户端负载均衡。 1 负…...

uniapp: 微信小程序包体积超过2M的优化方法(主包从2.7M优化到1.5M以内)

一、问题描述 在使用uniapp进行微信小程序开发时&#xff0c;经常会遇到包体积超过2M而无法上传&#xff1a; 二、解决方案 目前关于微信小程序分包大小有以下限制&#xff1a; 整个小程序所有分包大小不超过 30M&#xff08;服务商代开发的小程序不超过 20M&#xff09; 单个…...

【百日算法计划】:每日一题,见证成长(026)

题目 给定一个包含正整数、加()、减(-)、乘(*)、除(/)的算数表达式(括号除外)&#xff0c;计算其结果。 表达式仅包含非负整数&#xff0c;&#xff0c; - &#xff0c;&#xff0c;/ 四种运算符和空格 。 整数除法仅保留整数部分。 * * 示例 1: 输入: “32X2” 输出: 7 import…...

【大模型】prompt实践总结

文章目录 怎么才算是好的prompt设计准则基本原则精炼原则(奥卡姆剃刀准则)具体原则真实操作技巧指定角色增加fewshots列表化代码化强调需求真实迭代大模型优化情形任务的定义和评估标准似乎可以再明确一下出现了一些之前没有考虑过的特殊情况,可以重新组织语言优化Prompt来处…...

在Qt(以及C++)中, 和 * 是两个至关重要的符号--【雨露均沾】

在Qt&#xff08;以及C&#xff09;中&#xff0c;& 和 * 是两个至关重要的符号&#xff0c;它们用于处理引用和指针。我们将逐个解释这两个符号&#xff0c;并提供简单示例来说明它们的用法。 1. 引用&#xff08;&&#xff09; 定义: 引用是一种别名&#xff0c;它不…...

玻璃钢产品哪个网站做推广好/产品营销策略怎么写

1 案例1&#xff1a;配置并验证Split分离解析 1.1 问题 本例要求配置一台智能DNS服务器&#xff0c;针对同一个FQDN&#xff0c;当不同的客户机来查询时能够给出不 同的答案。需要完成下列任务&#xff1a; 从主机192.168.4.207查询时&#xff0c;结果为&#xff1a;www.tedu.…...

wordpress分类目录单个调用/个人主页网页设计

作用 在本地的pom文件配置好之后&#xff0c;执行deploy命令&#xff0c;可以将maven所打的jar包上传到远程的repository&#xff0c;便于其他开发者和工程共享。 pom.xml配置 首选&#xff0c;在pom文件中project标签下添加如下代码&#xff1a; <distributionManageme…...

哪些调查网站可以做问卷赚钱/百度问答下载安装

下面我们对ThunderSoft Video to HTML5 Converter 视频文件转换成HTML5v3.1.0.0官方版文件阐述相关使用资料和ThunderSoft Video to HTML5 Converter 视频文件转换成HTML5v3.1.0.0官方版文件的更新信息。ThunderSoft Video to HTML5 Converter 视频文件转换成HTML5ThunderSoft …...

简单网站建设公司/百度贴吧首页

原标题&#xff1a;谈谈学plc好还是数控好这两个的差别还是蛮大的虽说都是做编程的&#xff0c;一个是plc系统的编程&#xff0c;一个是CNN系统的。相比较而言plc学习掌握的东西比较多&#xff0c;强电、弱电以及最基本的电工基础是必须的&#xff0c;而数控则偏向于机械这方面…...

成都哪里有网络营销活动/搜索引擎优化的内容有哪些

两周前&#xff08;202.02.17&#xff09;&#xff0c;vite2.0 发布了&#xff0c;作为使用了浏览器原生 ESM 为下一代前端工具&#xff0c;vite 2.0 相较于 1.0 更加成熟。在此之前笔者就开始关注这类「新型」的前端工具。这次趁着 vite 2.0 发布&#xff0c;也成功将一个基于…...

非小号是根据国外哪个网站做的/企业网站注册域名的步骤

Memcached事实上&#xff0c;两次Hash算法第一次hash算法被用于定位Memcached示例第二次hash算法是底部HashMap中间hash算法Hash算法1.依据余数来进行计算(事实上java中的HashMap的hash算法也是用的这样的方式)2.一致性hash算法C的client --->libMemcached已经实现了该功能…...