mysql数据库第十二课------mysql语句的拔高2------飞高高

news/2024/11/16 20:22:13/

作者前言

🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂
​🎂 作者介绍: 🎂🎂
🎂 🎉🎉🎉🎉🎉🎉🎉 🎂
🎂作者id:老秦包你会, 🎂
简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂
喜欢学习C语言和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂🎂🎂🎂🎂🎂🎂
🎂个人主页::小小页面🎂
🎂gitee页面:秦大大🎂
🎂🎂🎂🎂🎂🎂🎂🎂
🎂 一个爱分享的小博主 欢迎小可爱们前来借鉴🎂


mysql语句的提高

  • **作者前言**
  • 内置语句
    • with
    • instert into select
    • regexp
  • MySQL高级
    • 视图
    • 事务
  • 总结:

内置语句

with

创建一个 临时表,当有一部分数据在sql中被频繁用到,可以使用with储存临时数据
比如:select emp_no ,age from ( select * from new_employees limit 20 )as a;
括号内的就是一张临时表,这样创建的效果很差,如果下一条sql语句要使用就得再写一次,这样很麻烦,如果使用with来创建临时表就会便捷很多,
上面的代码创建的临时表只要出了这给sql语句范围会被销毁,当我们再使用这张表就会报错,因为这张表不存在,

 with 表格1 as(select *from new_employeeslimit 20)( selectemp_no,age,first_namefrom表格1);
with 表格2 as(select*fromemployeeslimit 20)
(selectemp_no,null as age,first_name
from表格2) ;

而使用with创建一个临时表,会在内存申请一块空间进行存储,如果创建很多会造成内存很多被占用,造成mysql运行变慢,sql程序运行结束就消毁。而不使用with创建虽然可以减少内存占用,但是使用范围小,怎么创建临时表要看自己怎么来,

with创建多个临时表

with 表格1 as(select *from new_employeeslimit 20), 表格2 as(select*fromemployeeslimit 20)( selectemp_no,age,first_namefrom表格1)union all(selectemp_no,null as age,first_name
from表格2);

instert into select

通过insert语句,将查询到的数据直接写入到目标表格中
前面我们的往表格插入语句是

insert into 表名(字段)values(内容)

表格创建
create table if not exists`学生表格1`
(`id` int  auto_increment not null  primary key  comment '学生id',`name` varchar(30) not null  default  "无名氏" comment '学生姓名',`age` int  not null comment'学生年龄',`date` date  comment '学生入校时间')engine = InnoDB default charset=utf8 comment= '表格1';

insert into select

insert into  学生表格1
(`id`,`name`,`age`,`date`
)
select emp_no,first_name,age,birth_date
from new_employees;

注意一下,这个语句只能在一个数据库内进行数据的写入,不能跨数据库

regexp

下面插播一下符号
正则表达式
在这里插入图片描述
如果有看过我写过python的正则表达式的博客就会知道
*代表匹配0个或者多个字符
+代表至少匹配1个字符
^以…为开头
& 以…为结尾
. 任意一个字符
[]匹配里面的任意一个等
这里不过多介绍

那怎么在mysql使用正则表达式呢

REGEXP 或 regexp

select * from new_employees where first_name regexp "^G*";
select * from new_employees where first_name regexp "^G*";
select * from new_employees where first_name regexp "G+";
select * from new_employees where first_name regexp "z$";
select * from new_employees where first_name regexp "e|z$";

四则运算
在这里插入图片描述

select 
substring(birth_date,6,2) - month(now()) as 月份
,substring(birth_date,9,2) - day(now()) as 日期
,case when substring(birth_date,6,2) - month(now())= 0 and substring(birth_date,9,2) - day(now()) <=7 and substring(birth_date,9,2) - day(now()) >=0then "符合"
else "不符合" 
end 是否符合
from new_employees;

substring 字符分割
在数据库第十一课有介绍,

MySQL高级

视图

一张虚拟表,不具备数据储存功能,基本表数据发生了改变,视图也会跟着改变。仅仅是SQL查询
语句的结果集。它能够免去每次需要提取该数据的SQL语句查找时间。
视图的用途就是查询。提高数据复用性,提高了数据安全,更加清晰的展示了数据

简单的理解为视图就是查询语句的copy

   建表语句查询
show create table  学生表格1

视图的创建

create view  视图1 as
select id ,name ,age
from 学生表格1;

如果学生表格1里面 的数据有更改,那么视图1里面的内容也会发生更改,就像软链接
在这里插入图片描述
假设屏幕5秒变一次,每变换一次发送一次sql请求,sql语句(还要进行计算等)执行是10秒一次,就会发现 ,请求大于执行,会对服务器造成负担,

使用视图,屏幕发送请求给视图,对计算不沾边,而表格每变化一次,视图就会变化一次,哪怕计算有每隔一段时间执行一次,获取到都是在执行时段的最新数据,
缺点就是如果上一次的sql语句没有执行完,而新一次的sql语句已经开始了,会造成数据的重新计算,

这就需要视图逻辑简单,原数据的更新频率不要太高

事务

例如我需要向张三转账1万块钱。首先,我需要检查自己账户上是否有1万块钱;然后,我的账户会
扣除1万块钱;最后,张三的账户上会增加一万块钱。到此,整个转账过程结束。将分解出来的三个步骤
1.查询
2.扣除自己的钱
3张三的钱增加
必须看作一个整体来执行完成的单位,叫做 事务

四大特性(简称ACID)
原子性(Atomicity)
一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作

一致性(Consistency)
数据库总是从一个状态转换到另一个状态。例如转钱的例子,无论是三步中的哪一个步骤失败,都会在三方显示操作失败。

隔离性(Isolation)
通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见。

持久性(Durability)
一旦事务提交,则其所做的修改会永久保存到数据库。此时即使系统崩溃,修改的数据也不会丢失。

事务命令
表的引擎类型必须是innodb类型才可以使用事务,show create table table_name; 可以看到表格引擎类型
在这里插入图片描述

-- 开启事务
begin;
start transaction;
-- 提交事务
commit;
-- 回滚事务
rollback;
-- 执行事务流程
begin; -- 开启事务模式
insert into table_name(name) values('zhouzhou'); -- 此时的数据还没有正式写入表中
commit; -- 执行了提交,新增的数据才正式写入表中
-- 如果发现写入的数据有问题可以将commit换成rollback(回滚),撤销这次写入

注意:
1、修改数据命令会自动的触发事务,包括insert、update、delete
2、SQL语句中,能够手动开启事务的原因是:可以进行多次数据的修改,如果成功一起成功,否则一起
会滚到之前的数据

总结:

本次mysql数据库的介绍到这里了,有不懂的小可爱可以私聊我


http://www.ppmy.cn/news/1027989.html

相关文章

第一百二十七天学习记录:我的创作纪念日

机缘 今天收到CSDN官方的来信&#xff0c;想想也可以对我前面的学习记录进行一个总结。 关于来到CSDN的初心&#xff0c;也就是为了让自己养成一个良好的学习总结的习惯。这里要感谢我C语言视频教程的老师&#xff0c;是他建议学生们在技术博客中进行记录。对于技术博客&…

选择最适合自己的笔记本

选择最适合自己的笔记本电脑 一、了解笔记本品牌一线品牌准一线品牌二线品牌三线品牌 二、笔记本入手渠道笔记本入手渠道 三、根据需求选择机型使用需求1.日常使用2.商务办公、财务3.轻度剪辑、ps4.代码5.创意设计6.游戏 四、笔记本电脑配置如何选1.cpu2.显卡&#xff08;GPU&a…

代码随想录算法训练营第十七天|110.平衡二叉树 ,257. 二叉树的所有路径 ,404.左叶子之和

110.平衡二叉树 110. 平衡二叉树 思路&#xff1a; 分别求出每个节点其左右子树的高度&#xff0c;然后如果差值小于等于1&#xff0c;则返回当前二叉树的高度&#xff0c;否则返回-1&#xff0c;表示已经不是二叉平衡树了。 代码实现&#xff1a; 一棵高度平衡二叉树定义…

Python语言基础---选择判断循环结构详解

文章目录 &#x1f340;引言&#x1f340;if语句&#x1f340;if-else语句&#x1f340;if-elif-else语句&#x1f340;for循环&#x1f340;while循环 &#x1f340;引言 在Python编程语言中&#xff0c;选择判断和循环是两个非常重要的概念。它们可以让我们根据条件执行不同的…

大语言模型:LLM的概念是个啥?

一、说明 大语言模型&#xff08;维基&#xff1a;LLM- large language model&#xff09;是以大尺寸为特征的语言模型。它们的规模是由人工智能加速器实现的&#xff0c;人工智能加速器能够处理大量文本数据&#xff0c;这些数据大部分是从互联网上抓取的。 [1]所构建的人工神…

C# 随机法求解线性规划问题 蒙特卡洛

线性规划问题: max3x12x2 x12x2<5 2x1x2<4 4x13x2<9 x1>0 x2>0 正确的结果:x11.5; x21, max z6.5 Random random1 new Random(DateTime.Now.Millisecond);Random random2 new Random(DateTime.Now.Millisecond*DateTime.Now.Millisecond);double max-9999,x1…

4945: 二进制转十进制

4945: 二进制转十进制 时间限制: 1.000 Sec 内存限制: 128 MB 提交: 520 解决: 335 [命题人:][下载数据: 30] 提交状态报告 题目描述 将二进制数转成十进制输出 输入 一行&#xff0c;一个二进制数&#xff0c;二进制数的位数小于32位。 输出 一个十进制的整数。…

信创麒麟操作系统卸载docker,并分别用在线、yum、rpm三种方式安装信创的docker

备注&#xff1a;操作前建议对机器打快照备份&#xff0c;或者备份好数据&#xff0c;如未使用&#xff0c;第一次部署的情况可直接操作 一、卸载DataEase自带的docker # 停止服务 service dataease stop# 删除 docker 可执行文件 rm -f /usr/bin/containerd-shim-runc-v2 r…