Mysql基础进阶速成2

看着篇文章之前先看我的前一章:MySQL基础进阶速成1

函数:

每个字段使用一个函数:select +函数(字段名)+from +表名

upper:将字符串中的字母大写

lower:将字符串中的字符小写

max:得到最大值

min:得到最小值

count:计数

avg:平均数

length:获取字符串长度

........

select upper(name) from student;
select lower(name) from student;
select min(age) from student;
select max(age) from student;
select count(age) from student;

 条件函数:IF(字段,true返回值,else返回值) select+字段名+逗号隔开+if(字段条件,真返回值,假返回值)+from+表名

                    CASE value WHEN   [value1] THEN result1 [WHEN [value2] THEN result2 ...] [ELSE result] END   如果value等于value1,则返回result1,···,否则返回result

                CASE WHEN [condition1] THEN result1 [WHEN [condition2] THEN   result2 ...] [ELSE result] END       如果条件condition1为真,则返回result1,···,否则返回result

select age,if(age>=18,'成年人','未成年') from student;select age,name, case name when '张三' then '法外狂徒' 
when '李四' then '受害者' else '旁观者' end '成员';

group by 分组

select +字段名+from+表名+group by +靠那个字段分组的字段名

配合排序order by使用: 

select +字段名+from+表名+group by +靠那个字段分组的字段名+order by+对那个字段排序

// 对年龄分组并排序
select age,name from student group by age orderby age desc;

 分组筛选having:

select +字段名+from+表名+group by +靠那个字段分组的字段名+having +筛选条件

//对年龄分组后筛选出大于18的组
select age from student group by age having age>=18;

多表查询:

对于多张表查询需要这些表之间有外键连接 

或者先将两张表连接起来在查询

交叉连接cross join:有两个表,左表有m条数据记录,x个字段,右表有n条数据记录,y个字段,则执行交叉连接后将返回m*n条数据记录,x+y个字段

select + 字段名+from+表名+cross join +第二张表

自然连接natural join:自动匹配所有相同的字段名,同一个字段名只展现一次

select +字段名+from +表名+natural join +第二张表名

内连接:select+字段名+from+表名+inner join +另外一张表名+on(A表连接字段=B表连接字段)

# 交叉连接
select * from student1 cross join student2;
# 自然连接:
select * from student2 natural join student2;
# 内连接:
select * from student1 inner join student2 on (student1.id=student2.id);

外连接查询:inner join on 于内连接差不多

select * from student1 inner join student2 on student1.id=student2.id

 左连接left outer join和右连接right outer join:这两个连接即使两个表没有相同的字段也可以连接

# 左连接
select * from student1 left outer join student2 on (student1.id=student2.id);
# 右连接
select * from student1 right outer join student2 on (student1.id=student2.id);

 自连接查询:就是自己和自己连接后在查询,将连接的两个表都写成自己就是自连接了

# 左自连接
select * from student1 left outer join student1 on (student1.id=student1.id);
# 右自连接
select * from student1 right outer join student1 on (student1.id=student1.id);

 子查询:也就是一个sql语句里有多个select

select + 字段名字+from+表名+where+条件,

例子的意思:查找年龄大于张三的人员信息

select * from student where age>(select age from student where name='张三');

 数据库对象:

事务:简单来说就是要几个数据库一起操作。举个栗子:你和好友正在斗地主,输家要向赢家发红包,输家的账户余额减少的时候,赢家的账户余额增加

用sql来表示:先创建一个账户表

create table account(id int primary key auto increment,name varchar(10) not null,blance double
);

在表中插入你们的账户数据

insert into account values(null,'张三',200),(null,'李四',300),(null,'王五',400);

 张三地主输了20分别给了李四和王五,那么三个人的账户都得一起变动

# 开启事务:
start transaction;
# 从这里开始数据库开启缓存,缓存下面任务执行后的变化
# 要执行的任务:
updata account set balance=balance-20 where id=1;
updata account set balance=balance+10 where id=2;
updata account set balance=balance+10 where id=3;
# 回滚:从开始到这里执行的任务全部取消,缓存清空
rollback;
# 提交:如果报错那么上边执行的所有任务全部不成功,否则全部成功,缓存清空
commit;

 事务并发问题:

脏读:当一个事务正在访问数据并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另外一个事务也访问了这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是“脏数据”,

不可重复读:指在一个事务内多次读同一数据。在这个事务还没有结束时,另一个事务也访问该数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改导致第一个事务两次读取的数据可能不太一样。这就发生了在一个事务内两次读到的数据是不一样的情况,因此称为不可重复读。

幻读:幻读与不可重复读类似。它发生在一个事务(T1)读取了几行数据,接着另一个并发事务(T2)插入了一些数据时。在随后的查询中,第一个事务(T1)就会发现多了一些原本不存在的记录,就好像发生了幻觉一样,所以称为幻读

事务隔离:用来解决以上问题:

read uncommitted:解决不了

read committed:解决脏读:

repeatable read:解决脏读和不重复读:

serializable:全部解决

设置当前会话的事务隔离(数据库默认的是repeatable read):

set session transaction isolation level read uncommitted;  
set session transaction isolation level read committed;  
set session transaction isolation level repeatable read;  
set session transaction isolation level serializable;

好了,到这里数据库的使用就基本完成了!!!大家点个赞在走呗!!!

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

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

相关文章

Python进阶之-mmap详解

✨前言: Python中的mmap模块允许你创建一个内存映射的文件,这意味着文件数据直接映射到虚拟内存。这样做的好处包括:提高文件访问速度、可通过修改内存来修改文件、可以像操作普通内存一样操作这块特殊的内存区域。 ✨mmap基础 要使用mmap…

嵌入式仪器模块:音频综测仪和自动化测试软件

• 24 位分辨率 • 192 KHz 采样率 • 支持多种模拟/数字音频信号的输入/输出 应用场景 • 音频信号分析:幅值、频率、占空比、THD、THDN 等指标 • 模拟音频测试:耳机、麦克风、扬声器测试,串扰测试 • 数字音频测试:平板电…

高考志愿填报:大学学什么专业比较好呢?

准高三一枚,比较迷茫,求推荐一些专业以后比较好就业,发展前景较好的。听说互联网行业比较吃香,有想过以后做运营这一块,但是不知道应该在大学选什么专业,求推荐吧! 学什么专业好? 这…

Vitis HLS 学习笔记--global_array_RAM初始化及复位

目录 1. 简介 2. 示例代分析 2.1 源代码 2.2 URAM 不可用 2.3 代码功能解释 2.4 综合报告 2.4.1 顶层控制接口 2.4.2 软件 IO 信息 2.4.3 存储绑定 3. 对比两种 solution 3.1 solution_A 3.2 solution_B 4. 总结 1. 简介 在C程序中,数组是一种基本的…

数据库漫谈-MongoDB

MongoDB是非关系型数据库,适合存储文档,存储大数据。MongoDB其实是广告公司发明的,因为现有的关系型数据库不适合广告行业,所以他们就自己做了一个数据库。MongoDB具有如下几个特点: 1、高可用。它是分布式数据库&…

LLM的基础模型8:深入注意力机制

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技(Mamba,xLSTM,KAN)则提…

jspm基于Java Web的网上购物系统的设计与实现-手把手调试搭建

jspm基于Java Web的网上购物系统的设计与实现-手把手调试搭建 jspm基于Java Web的网上购物系统的设计与实现-手把手调试搭建

整理好了!2024年最常见 20 道分布式、微服务面试题(六)

上一篇地址:整理好了!2024年最常见 20 道分布式、微服务面试题(五)-CSDN博客 十一、什么是服务网格(如Istio或Linkerd)? 服务网格(Service Mesh)是一种微服务架构中的基…

在线按模板批量生成文本工具

具体请前往:在线按模板批量生成文本工具

URL的编码解码(一),仅针对ASCII码字符

用十六进制对特定字符编码,利用百分号标识搜索字符串解码十六进制字符。 (笔记模板由python脚本于2024年06月09日 18:05:25创建,本篇笔记适合喜好探寻URL的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free…

Java Set系列集合的使用规则和场景(HashSet,LinkedHashSet,TreeSet)

Set集合 package SetDemo;import java.util.HashSet; import java.util.Iterator; import java.util.Set;public class SetDemo {public static void main(String[] args) {/*Set集合的特点:1.Set系列集合的特点:Set集合是一个存储元素不能重复的集合方…

Synchronized的锁膨胀艺术:深入源码的探险之旅

1. 引言 在Java的并发编程中,synchronized关键字一直扮演着举足轻重的角色。然而,随着并发需求的不断增长和性能要求的日益提高,单纯的synchronized关键字已经无法满足所有场景的需求。从JDK 1.6开始,Java对synchronized进行了深度的优化,其中最为引人注目的便是“锁膨胀…

如何使用 Python 的字典来存储和检索数据,以提高数据操作的效率?

Python 的字典(Dictionary)是一种基于键值对的数据结构,它提供了高效的数据存储和检索方式。以下是一些使用字典来提高数据操作效率的技巧: 使用合适的键: 选择不可变类型(如字符串、数字或元组&#xff09…

VB6.0 调用存储过程

最近有在做一个需求,需要在VB6.0中调用存储过程,整理了一下,供大家参考, 范例: 1 Function callStoredProcedure(sEmployeeID As String, Optional sNotes As String "") As String2 On Error GoTo er…

Vue13-计算属性的简写

一、计算属性的简写 注意: 当计算属性只有get,没有set的时候,才能用简写形式!!!

svn的使用

【图文详解】入职必备——SVN使用教程-CSDN博客 使用SVNBucket作为服务端,来辅助学习. 什么时候会产生冲突呢? 原本A,B,服务器的版本都一致,都是最新版. A修改文件m,向服务器提交 B修改文件m,向服务器提交,这时候出现了冲突 双击冲突的文件,手动修改

---java 抽象类 和 接口---

抽象类 再面向对对象的语言中,所以的对象都是通过类来描述的,但如果这个类无法准确的描述对象的 话,那么就可以把这个类设置为抽象类。 实例 这里用到abstract修饰,表示这个类或方法是抽象方法 因为会重写motifs里的show方法…

【爬虫实战项目一】Python爬取豆瓣电影榜单数据

目录 一、环境准备 二、编写代码 2.1 分页分析 2.2 编码 一、环境准备 安装requests和lxml pip install requests pip install lxml 二、编写代码 2.1 分页分析 编写代码前我们先看看榜单的url 我们假如要爬取五页的数据,那么五个url分别是: htt…

Python基础教程(七):函数编程-从基础到进阶

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

再读高考作文题

新课标I卷:讨论了随着互联网和人工智能的普及,问题是否会变得越来越少,要求考生写一篇文章,表达自己对于这一现象的联想和思考。 从来就没有什么救世主 AI也不是​​​​​ 一直不会写作文,直到高中,才堪堪…