MySQL— 基础语法大全及操作演示!!!(下)

MySQL—— 基础语法大全及操作演示(下)—— 持续更新

    • 三、函数
      • 3.1 字符串函数
      • 3.2 数值函数
      • 3.3 日期函数
      • 3.4 流程函数
    • 四、约束
      • 4.1 概述
      • 4.2 约束演示
      • 4.3 外键约束
          • 4.3.1 介绍
          • 4.3.2 语法
          • 4.3.3 删除/更新行为
    • 五、多表查询
      • 5.1 多表关系
          • 5.1.1 一对多
          • 5.1.2 多对多
          • 5.1.3 一对一
      • 5.2 多表查询概述
          • 5.2.1 数据准备
          • 5.2.2 概述
          • 5.2.3 分类
      • 5.3 内连接
      • 5.4 外连接
      • 5.5 自连接
          • 5.5.1 自连接查询
          • 5.5.2 联合查询
      • 5.6 子查询
          • 5.6.1 概述
          • 5.6.2 标量子查询
          • 5.6.3 列子查询
          • 5.6.4 行子查询
          • 5.6.5 表子查询
    • 六、事务
      • 6.1 事务简介
      • 6.2 事务操作
          • 6.2.1 未控制事务
          • 6.2.2 控制事务一
          • 6.2.3 控制事务二
      • 6.3 事务四大特性
      • 6.4 并发事务问题
      • 6.5 事务隔离级别

MySQL— 基础语法大全及操作演示!!!(上)https://blog.csdn.net/weixin_43412762/article/details/132051493

三、函数

函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着,这一段程序或代码在MySQL中
已经给我们提供了,我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即可。

那么,函数到底在哪儿使用呢?

我们先来看两个场景:
在这里插入图片描述

  1. 在企业的OA或其他的人力系统中,经常会提供的有这样一个功能,每一个员工登录上来之后都能够看到当前员工入职的天数。 而在数据库中,存储的都是入职日期,如 2017-11-12,那如果快速计算出天数呢?
  2. 在做报表这类的业务需求中,我们要展示出学员的分数等级分布。而在数据库中,存储的是学生的分数值,如98/75,如何快速判定分数的等级呢?

其实,上述的这一类的需求呢,我们通过MySQL中的函数都可以很方便的实现 。

MySQL中的函数主要分为以下四类: 字符串函数数值函数日期函数流程函数

3.1 字符串函数

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

在这里插入图片描述

举个栗子: 由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0。比如: 1号员工的工号应该为00001。

update emp set workno = lpad(workno, 5, '0');

在这里插入图片描述

3.2 数值函数

常见的数值函数如下:

在这里插入图片描述
举个栗子: 通过数据库的函数,生成一个六位数的随机验证码。

  • 思路: 获取随机数可以通过rand()函数,但是获取出来的随机数是在0-1之间的,所以可以在其基础
    上乘以1000000,然后舍弃小数部分,如果长度不足6位,补0
select lpad(round(rand()*1000000 , 0), 6, '0');

在这里插入图片描述

3.3 日期函数

常见的日期函数如下:

在这里插入图片描述

举个栗子: 查询所有员工的入职天数,并根据入职天数倒序排序。

  • 思路: 入职天数,就是通过当前日期 - 入职日期,所以需要使用 datediff 函数来完成。
select name, datediff(curdate(), entrydate) as 'entrydays' from emp order by entrydays desc;

在这里插入图片描述

3.4 流程函数

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

在这里插入图片描述
举个栗子: 需求: 查询emp表的员工姓名和工作地址 (北京/上海 ----> 一线城市 , 其他 ----> 二线城市)

selectname,( case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else'二线城市' end ) as '工作地址'
from emp;

在这里插入图片描述

🚀🚀🚀 函数操作 快速食用:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------->

## 3.1 字符串函数-----------------------------------------------------
# 1. concat : 字符串拼接
select concat('1 Hello', ' MySQL');
# 2. lower : 全部转小写
select lower('Hello');
# 3. upper : 全部转大写
select upper('Hello');
# 4. lpad : 左填充,达到5个字符
select lpad('01', 5, '-');
# 5. rpad : 右填充,达到5个字符
select rpad('01', 5, '-');
# 6. trim : 去除头尾空格
select trim(' Hello MySQL ');
# 7. substring : 截取子字符串,从第一个截取5个字符
select substring('r Hello MySQL', 1, 5);## 3.2 数值函数-------------------------------------------------------
# 1. ceil:向上取整,值为2
select ceil(1.1);
# 2. floor:向下取整,值为1
select floor(1.9);
# 3. mod:取模,值为3
select mod(7, 4);
# 4. rand:获取随机数
select rand();
# round:四舍五入,值为2.34
select round(2.344, 2);## 3.3 日期函数-------------------------------------------------------
# 1. curdate:当前日期
select curdate();
# 2. curtime:当前时间
select curtime();
# 3. now:当前日期和时间
select now();
# 4. YEAR , MONTH , DAY:当前年、月、日
select year(now());
select month(now());
select day(now());
# 5. date_add:增加指定的时间间隔
select date_add(now(), interval 70 year );
# 6. datediff:获取两个日期相差的天数
select datediff('2021-10-01', '2021-12-01');## 3.4 流程函数-------------------------------------------------------
# 1. if,返回 Error
select if(false, 'Ok', 'Error');
# 2. ifnull
select ifnull('Ok','Default'); 	# 返回 Ok
select ifnull('','Default');	# 返回 ‘’ 
select ifnull(null,'Default');	# 返回 Default
# 3. case when then else end
selectname,( case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else'二线城市' end ) as '工作地址'
from emp;

四、约束

4.1 概述

  • 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
  • 目的:保证数据库中数据的正确、有效性和完整性。
  • 分类:
    在这里插入图片描述
    • primary key :存在且唯一;
    • unique:只需唯一,不一定存在。

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

4.2 约束演示

上面我们介绍了数据库中常见的约束,以及约束涉及到的关键字,那这些约束我们到底如何在创建表、修改表的时候来指定呢,接下来我们就通过一个案例,来演示一下。

案例需求: 根据需求,完成表结构的创建。需求如下:
在这里插入图片描述
对应的建表语句为:

create table tb_user(id int auto_increment primary key comment 'ID唯一标识',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 '用户表';

4.3 外键约束

4.3.1 介绍

外键:用来让两张表的数据之间建立连接,从而保证数据的 一致性完整性

4.3.2 语法

1). 添加外键

create table 表名(字段名 数据类型,...[constraint] [外键名称] foreign key (外键字段名) references 主表 (主表列名)
);
alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表 (主表列名) ;
4.3.3 删除/更新行为

添加了外键之后,再删除父表数据时产生的约束行为,我们就称为删除/更新行为。具体的删除/更新行为有以下几种:

在这里插入图片描述
具体语法为:

alter table 表名 add constraint 外键名称 foreign key(外键字段) references 主表名 (主表字段名) on update cascade on delete cascade;

演示如下:

由于 no action 是默认行为,我们前面语法演示的时候,已经测试过了,就不再演示了,这里我们再
演示其他的两种行为:cascadeset null

⭐️ 1). CASCADE

alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update cascade on delete cascade ;

⭐️ 2). SET NULL

在进行测试之前,我们先需要删除上面建立的外键 fk_emp_dept_id。然后再通过数据脚本,将 empdept 表的数据恢复了。

alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update set null on delete set null ;

五、多表查询

在讲解 SQL语句 的时候,讲解了DQL语句,也就是数据查询语句,但是之前讲解的查询都是单表查询,而本章节我们要学习的则是多表查询操作,主要从以下几个方面进行讲解。

5.1 多表关系

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

  • 一对多(多对一)
  • 多对多
  • 一对一
5.1.1 一对多
5.1.2 多对多
5.1.3 一对一

5.2 多表查询概述

5.2.1 数据准备
5.2.2 概述

多表查询就是指从多张表中查询数据。

  • 原来查询单表数据,执行的SQL形式为:select * from emp;
  • 那么我们要执行多表查询,就只需要使用逗号分隔多张表即可,如: select * from emp, dept ;

具体的执行结果如下:

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

在这里插入图片描述

5.3 内连接

内连接查询的是两张表交集部分的数据。(也就是绿色部分的数据).
在这里插入图片描述

内连接的语法分为两种: 隐式内连接显式内连接。先来学习一下具体的语法结构。

1). 隐式内连接

select 字段列表 from1 ,2 where 条件 ... ;

2). 显式内连接

select 字段列表 from1 [ inner ] join2 on 连接条件 ... ;

表的别名:

  • ①. tablea as 别名1 , tableb as 别名2 ;
  • ②. tablea 别名1 , tableb 别名2 ;

注意事项:
一旦为表起了别名,就不能再使用表名来指定对应的字段了,此时只能够使用别名来指定字段。

5.4 外连接

在这里插入图片描述
外连接分为两种,分别是:左外连接右外连接。具体的语法结构为:

⭐️ 1). 左外连接

select 字段列表 from1 left [ outer ] join2 on 条件 ... ;
  • 左外连接相当于查询 表1(左表)的所有数据,当然也包含表1和表2交集部分的数据。

⭐️ 2). 右外连接

select 字段列表 from1 right [ outer ] join2 on 条件 ... ;
  • 右外连接相当于查询 表2(右表)的所有数据,当然也包含表1和表2交集部分的数据。

5.5 自连接

5.5.1 自连接查询

自连接查询,顾名思义,就是自己连接自己,也就是把一张表连接查询多次。我们先来学习一下自连接的查询语法:

select 字段列表 from 表A 别名A join 表A 别名B on 条件 ... ;
  • 而对于自连接查询,可以是内连接查询,也可以是外连接查询。

注意事项:

  • 在自连接查询中,必须要为表起别名,要不然我们不清楚所指定的条件、返回的字段,到底是哪一张表的字段。
5.5.2 联合查询

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

select 字段列表 from 表A ...
union [ all ]
select 字段列表 from 表B ....;
  • 对于联合查询的多张表的 列数 必须保持一致,字段类型 也需要保持一致。
  • union all 会将全部的数据直接合并在一起,union 会对合并之后的数据去重。

注意:

  • 如果多条查询语句查询出来的结果,字段数量 不一致,在进行 union/union all 联合查询时,将会报错。

5.6 子查询

5.6.1 概述

⭐️ 1). 概念

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

select * from t1 where column1 = ( select column1 from t2 );
  • 子查询外部的语句可以是 insert / update / delete / select的任何一个。

⭐️ 2). 分类

根据子查询结果不同,分为:

  • A. 标量子查询(子查询结果为单个值)
  • B. 列子查询 (子查询结果为一列)
  • C. 行子查询 (子查询结果为一行)
  • D. 表子查询 (子查询结果为多行多列)

根据子查询位置,分为:

  • A. where 之后
  • B. from 之后
  • C. select 之后
5.6.2 标量子查询

子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。

  • 常用的操作符:= <> > >= < <=
5.6.3 列子查询

子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。

  • 常用的操作符:innot inanysomeall

在这里插入图片描述

5.6.4 行子查询

子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。

  • 常用的操作符:=<>innot in
5.6.5 表子查询

子查询返回的结果是 多行多列,这种子查询称为表子查询。

  • 常用的操作符:in

六、事务

6.1 事务简介

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

就比如: 张三给李四转账1000块钱,张三银行账户的钱减少1000,而李四银行账户的钱要增加1000。 这一组操作就必须在一个事务的范围内,要么都成功,要么都失败。

在这里插入图片描述

  • 正常情况: 转账这个操作, 需要分为以下这么三步来完成 , 三步完成之后, 张三减少1000, 而李四增加1000, 转账成功。

在这里插入图片描述

  • 异常情况: 转账这个操作, 也是分为以下这么三步来完成 , 在执行第三步是报错了, 这样就导致张三减少1000块钱, 而李四的金额没变, 这样就造成了数据的不一致, 就出现问题了。

在这里插入图片描述

  • 为了解决上述的问题,就需要通过数据的事务来完成,我们只需要在业务逻辑执行之前开启事务,执行完毕后提交事务。如果执行过程中报错,则回滚事务,把数据恢复到事务开始之前的状态。

在这里插入图片描述

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

6.2 事务操作

6.2.1 未控制事务
6.2.2 控制事务一

⭐️ 1). 查看/设置事务提交方式

select @@autocommit ;
set @@autocommit = 0 ;

⭐️ 2). 提交事务

commit;

⭐️ 3). 回滚事务

rollback;

注意:上述的这种方式,我们是修改了事务的自动提交行为, 把默认的自动提交修改为了手动提交, 此时我们执行的DML语句都不会提交, 需要手动的执行 commit 进行提交。

6.2.3 控制事务二

⭐️ 1). 开启事务

start transactionbegin ;

⭐️ 2). 提交事务

commit;

⭐️ 3). 回滚事务

rollback;

6.3 事务四大特性

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

上述就是事务的四大特性,简称 ACID
在这里插入图片描述

6.4 并发事务问题

⭐️ 1). 赃读:一个事务读到另外一个事务还没有提交的数据。

在这里插入图片描述

  • 比如B读取到了A未提交的数据。

⭐️ 2). 不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。

在这里插入图片描述

  • 事务A两次读取同一条记录,但是读取到的数据却是不一样的。

⭐️ 3). 幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了 “幻影”。
在这里插入图片描述

6.5 事务隔离级别

为了解决并发事务所引发的问题,在数据库中引入了事务隔离级别。主要有以下几种:
在这里插入图片描述
⭐️ 1). 查看事务隔离级别

select @@transaction_isolation;

⭐️ 2). 设置事务隔离级别

set [ session | global ] transaction isolation level { read uncommitted | read committed | repeatable read | serializable }

注意:事务隔离级别越高,数据越安全,但是性能越低。

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

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

相关文章

Matplotlib数据可视化(一)

目录 1.Matplotlib简介 2.Matplotlib绘图基础 2.1 创建画布与子图 2.2 添加画布属性 2.3 绘图的保存与显示 1.Matplotlib简介 Matplotlib是一个用于绘制数据可视化图表的Python库。它提供了广泛的功能和灵活性&#xff0c;可以创建各种类型的图表&#xff0c;包括折线图、…

min-height到底是什么?

1、概念 给元素设置最小高度&#xff0c;当height小于 min-height &#xff0c;min-height会覆盖height的值 2、案例 如果我有一个盒子A&#xff0c;A设置了min-height的高度为200px&#xff1b;并设置了overflow&#xff1a;auto&#xff0c;那么如果里面的内容超过了200px…

深入理解python虚拟机:程序执行的载体——栈帧

栈帧&#xff08;Stack Frame&#xff09;是 Python 虚拟机中程序执行的载体之一&#xff0c;也是 Python 中的一种执行上下文。每当 Python 执行一个函数或方法时&#xff0c;都会创建一个栈帧来表示当前的函数调用&#xff0c;并将其压入一个称为调用栈&#xff08;Call Stac…

MySQL 主从复制遇到 1590 报错

作者通过一个主从复制过程中 1590 的错误&#xff0c;说明了 MySQL 8.0 在创建用户授权过程中的注意事项。 作者&#xff1a;王祥 爱可生 DBA 团队成员&#xff0c;主要负责 MySQL 故障处理和性能优化。对技术执着&#xff0c;为客户负责。 本文来源&#xff1a;原创投稿 爱可生…

【Python】代理池针对ip拦截破解

代理池是一种常见的反反爬虫技术&#xff0c;通过维护一组可用的代理服务器&#xff0c;来在被反爬虫限制的情况下&#xff0c;实现数据的爬取。但是&#xff0c;代理池本身也面临着被目标网站针对ip进行拦截的风险。 本文将详细介绍代理池针对ip拦截破解的方法&#xff0c;包含…

Python入门教程 | Python简介和环境搭建

Python 简介 Python是一种高级编程语言&#xff0c;由荷兰人Guido van Rossum于1991年创建。它以其简单易学、可读性强和丰富的生态系统而受到广泛喜爱。它被广泛应用于各个领域&#xff0c;包括Web开发、科学计算、数据分析、人工智能等。 Python的特点 简洁易读&#xff1a…

回归预测 | MATLAB实现TSO-LSSVM金枪鱼群算法优化最小二乘支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现TSO-LSSVM金枪鱼群算法优化最小二乘支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现TSO-LSSVM金枪鱼群算法优化最小二乘支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&a…

免费开源的vue+express搭建的后台管理系统

此项目已开源 前端git地址&#xff1a;exp后台管理系统前端: exp后台管理系统前端 后端git地址&#xff1a;express后台管理系统: express后台管理系统 安装运行 npm i yarn i 前端: npm run dev | yarn dev 后端: npm run start | yarn start 主要技术栈 前端后端名称版本名…

大数据及软件教学与实验专业实训室建设方案

一 、系统概述 大数据及软件教学与实验大数据及软件教学与实验在现代教育中扮演重要角色&#xff0c;这方面的教学内容涵盖了大数据处理、数据分析、数据可视化和大数据应用等多个方面。以下是大数据及软件教学与实验的一般内容&#xff1a;1. 数据基础知识&#xff1a;教授学生…

ZLMediakit-method ANNOUNCE failed: 401 Unauthorized

使用ffmpeg推流&#xff1a; nohup ffmpeg -stream_loop -1 -re -i "/usr/local/mp4/test.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://10.55.134.12/live/test &[rootlocalhost ~]# ffmpeg -stream_loop -1 -re -i "/usr/local/mp…

人脸老化预测(Python)

本次项目的文件 main.py主程序如下 导入必要的库和模块&#xff1a; 导入 TensorFlow 库以及自定义的 FaceAging 模块。导入操作系统库和参数解析库。 定义 str2bool 函数&#xff1a; 自定义函数用于将字符串转换为布尔值。 创建命令行参数解析器&#xff1a; 使用 argparse.A…

【LINUX相关】生成随机数(srand、/dev/random 和 /dev/urandom )

目录 一、问题背景二、修改方法2.1 修改种子2.2 使用linux中的 /dev/urandom 生成随机数 三、/dev/random 和 /dev/urandom 的原理3.1 参考连接3.2 重难点总结3.2.1 生成随机数的原理3.2.2 随机数生成器的结构3.2.3 二者的区别和选择 四、在代码的使用方法 一、问题背景 在一个…

RabbitMq-2安装与配置

Rabbitmq的安装 1.上传资源 注意&#xff1a;rabbitmq的版本必须与erlang编译器的版本适配 2.安装依赖环境 //打开虚拟机 yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel m4 ncurses-devel tk tc xz3.安装erlan…

不含数字的webshell绕过

异或操作原理 1.首先我们得了解一下异或操作的原理 在php中&#xff0c;异或操作是两个二进制数相同时&#xff0c;异或(相同)为0&#xff0c;不同为1 举个例子 A的ASCII值是65&#xff0c;对应的二进制值是0100 0001 的ASCII值是96&#xff0c;对应的二进制值是 0110 000…

Android11 中 LED 使用-RK3568

文章目录 前言原理图设备树驱动前言 现在我们来学习点亮LED 原理图 然后对应在核心板原理图上查找 Working_LEDEN_H_GPIO0_B7,如下图所示: 那么我们只要控制 GPIO0_B7 即可控制 led 的亮灭。 设备树 leds: leds {compatible = "gpio-leds";work_led: work {gpi…

6-模板初步使用

官网: 中文版: 介绍-Jinja2中文文档 英文版: Template Designer Documentation — Jinja Documentation (2.11.x) 模板语法 1. 模板渲染 (1) app.py 准备数据 import jsonfrom flask import Flask,render_templateimport settingsapp Flask(__name__) app.config.from_obj…

上海亚商投顾盘:沪指震荡反弹 机器人概念股掀涨停潮

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日震荡反弹&#xff0c;科创50盘中涨超1%。机器人概念股掀涨停潮&#xff0c;通力科技、昊志机电、哈焊…

CentOS ens160 显示disconnected

使用nmcli device查看网卡状态&#xff0c;显示如图&#xff1a; 检查宿主机系统VMware DHCP Sevice和VMware NAT Sevice服务是否正常运行。 右键点击我的电脑管理按钮&#xff0c;打开计算机管理点击服务

C++入门篇9---list

list是带头双向循环链表 一、list的相关接口及其功能 1. 构造函数 函数声明功能说明list(size_type n,const value_type& valvalue_type())构造的list中包含n个值为val的元素list()构造空的listlist(const list& x)拷贝构造list(InputIterator first, InputIterator…