首页 > 数据库 >Mysql基础进阶速成2

Mysql基础进阶速成2

时间:2024-06-07 17:58:26浏览次数:31  
标签:join 进阶 student1 速成 age 字段名 Mysql id select

看着篇文章之前先看我的前一章: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;

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

标签:join,进阶,student1,速成,age,字段名,Mysql,id,select
From: https://blog.csdn.net/m0_73426548/article/details/139523586

相关文章

  • MySQL随笔
    1、隔离级别innoDB通过间隙锁锁定查询范围避免被其他事物修改未提交读(导致脏读)、已提交读(导致不可重复读)、可重复读(mysql默认,导致幻读)、串行化 脏读:事物执行的过程读到其他事物未提交的数据不可重复读:事物a在多次读取某数据时,事物b进行了修改,导致食物a两......
  • 2024年网络安全最新60天黑客速成,学完的都进大厂了!
    但现实中,黑客其实并没有那么神秘,也是一群疯狂码代码,头发没剩几根的程序员…那么想成为一名真正的黑客,需要多久呢?不开玩笑,只需60天!下面我们来看看要怎么有效学习:零基础的小伙伴跟着我的这套学习路线,日后跳槽大厂、拿到百万年薪也不是不可能!首先初级阶段需要花2天时间了......
  • mysql8 无法连接navicat问题
    1、修改MySQL的配置文件(my.cnf或者my.ini),在[mysqld]部分添加或者修改default_authentication_plugin=mysql_native_password。重启mysql服务2、创建或修改用户并设置密码:如果您还没有 root 用户从任何主机连接的权限,您需要首先以具有足够权限的用户(通常是本地 root 用户)登录......
  • MySQL中InnoDB引擎行数据过大对B+树存储的影响
    效率工具推荐一个程序员常用的工具网站:程序员常用工具(http://cxytools.com),有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。小报童专栏精选Top100推荐一个小报童专栏导航站:小报童精选Top100(http://xbt100.top),收录了生财有术项目精选、A......
  • GitHub狂揽6700 Star,Python进阶必备的案例、技巧与工程实践
    当下是Python急剧发展的时代,越来越多的人开始学习和使用Pyhon,而大家也遇到了各种问题。这份手册清晰、细致地介绍了Python代码应该遵循的编程风格,并解释了背后的原理和机制。入门Python语言相对简单,但写出优雅的代码并非易事。这份手册深入讲解了Python进阶知识的方方......
  • ubuntu 22.04 安装MySQL8后的基本设置
    安装sudoaptupdatesudoaptupgradesudoaptinstallapache2mysql-serverphplibapache2-mod-phpphp-mysql初始化配置MySQL初始化配置以及设置root密码初始化MySQL安全配置sudomysql_secure_installation这个命令会提示您进行一系列的安全设置,包括:是否......
  • 超级详细的mysql数据库安装指南
    如果你的电脑是windows,参考下面的安装步骤。一、下载mysql数据库进入MySQL官方网站(MySQLCommunityDownloads),按下图顺序点击“进入下载页面 在下载页面拉到最下面会看到下图中的安装软件 MSIInstaller注意有两个,这两个有什么区别呢?第一个(大小是10多M)是联网在线安装,会......
  • 谈谈Redis缓存中MySQL的数据如何与Redis同步
    在现代应用程序中,性能和响应速度是至关重要的。为了提高数据访问速度,常常会使用缓存技术。Redis作为一种高性能的内存数据库,常被用作缓存层,而MySQL则作为持久化存储层。如何有效地将MySQL数据与Redis缓存进行同步,是一个关键问题。本文将详细探讨Redis作为缓存时,http://ww......
  • 基于Java+SpringBoot+Mysql实现的协同过滤推荐旅游景点平台设计与实现
    一、前言介绍:1.1项目摘要随着人们生活水平的提高和休闲时间的增多,旅游已成为人们生活中不可或缺的一部分。然而,传统的旅游方式往往存在信息不对称、服务质量参差不齐、行程安排不够灵活等问题,给游客带来了诸多不便。与此同时,互联网技术的快速发展为旅游行业带来了革命性......
  • 基于Java+SpringBoot+Mysql实现的在线电影订票系统设计与实现
    一、前言介绍:1.1项目摘要在线电影订票系统的课题背景主要源于现代社会的信息化、网络化发展趋势以及人们对便捷、高效生活方式的追求。随着互联网技术的飞速发展和普及,人们的生活方式正在发生深刻的变化。在线购物、在线支付、在线预订等网络服务已经渗透到人们日常生活......