大数据_MySQL之DQL(数据查询语言)

article/2025/10/20 15:22:14

目录

引言

 一、MySQL概念、常见指令函数

1. MySQL

1.1.MySQL概念

1.2.MySQL的优点

1.3.MySQL服务的启动和停止

1.4.MySQL服务的登录和退出

1.5.MySqL的常见命令

2. 常见函数:

2.1.函数概念

2.2.常见函数分类(单行函数)

2.3.常见函数分类(分组函数)

三、基础查询 

1.语法 

 2.简单查询

3.起别名 

 4.计算列

5.补充知识

四、条件查询

1.概念

2.分类

3.特殊查询案例

五、排序查询

 1.概念

 2.排序分类

六、分组查询

1.语法概念 

2.特点

七、连接查询(重点)

1.背景概念

2.分类

2.1.按年代分类

2.2.按功能分类

 3.补充

八、子查询

 1.概念

 2.分类

2.1.按子查询出现的位置

2.2.按结果集的行列数不同

3.子查询的特点

九、分页查询(limit)

1.应用场景

2.语法

3.分页查询的特点 

十、联合查询(union)

十一:推书


引言


MySQL语言大致有以下几种:

DDL(Data definition language)数据定义语言,主要的操作对象是数据库和表的create、drop、alter。
DML(Data manipulation language) 数据操纵语言,主要的是对表进行insert、delete、update。
DQL(Data query language)数据查询语言,主要是对表数据进行各维度的select查询。
DCL(Data control language)数据控制语言, 用来设置或更改数据库用户或角色权限的语句,在默认情况下只有系统管理员有权利执行DCL。
TCL(transaction control language)事务控制语言, 主要有save、commit、roll、back等命令。
 

 今天先给大家跳个舞......哦不,给大家讲讲DQL数据查询语言吧。

 一、MySQL概念、常见指令函数


在给大家介绍DQL之前,我们先来了解一下MySQL与一些常见函数,方便我们在进行语言操作中的代码大家能够知道这个关键字、函数是什么意思。

1. MySQL

1.1.MySQL概念

MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

是基于客户机——服务器的DBMS(MySQL、Oracle、SqlServer)其中之一,是数据库管理系统分类之一。而既然是管理系统,那么必然有它自己的一套生态语言。

而我们进行MySQL操作,使用的语言呢?就是SQL

SQL:指的是结构化查询语言,用于和数据库通信的语言。其中分类之一,就有我们今天的重点——DQL数据查询语言

1.2.MySQL的优点

1、成本低:开放源代码,一般可以免费试用

2、性能高:执行很快

3、简单:很容易安装和使用

1.3.MySQL服务的启动和停止

方式一:计算机——右击管理——服务——MySQL

​方式二:通过管理员身份运行cmd命令提示行

        net start mysql(启动服务)

        ​net stop mysql(停止服务)

1.4.MySQL服务的登录和退出

方式一:通过MySQL自带的客户端(只限于root用户)

方式二:通过cmd命令提示行关闭,未配置MySQL环境变量,需在MySQL安装的bin下启动cmd。

        登录:​mysql 【-h主机名 -P端口号 】-u用户名 -p密码

                例如:【mysql -h localhost -P 3306 -u root -p】,回车,最后输入密码

                或者:【mysql -h localhost -P 3306 -u root -p密码】,直接回车

                如果本机,则可以简写为:【mysql -u root -p密码】

        ​退出:​exit或ctrl+C

 

1.5.MySqL的常见命令

1、查看当前所有的数据库
    show databases;
2、打开指定的库
    use 库名
3、查看当前库的所有表
    show tables;
4、查看其他库的所有表
    show tables from 库名;
5、创建表
    create table 表名(  列名  列类型,   列名   列类型,...... );
6、查看表结构
    desc 表名;
7、查看服务器的版本
    方式一:登录到mysql服务端    select version();
    方式二:没有登录到mysql服务端   mysql --version 或者 mysql --V

 

2. 常见函数:

而常见指令函数,是我们进行操作时,需要或肯定会用上的方法!没错,就是java中的方法,拿来用就行的方法。(重要的东西说三遍!)

2.1.函数概念

类似于java中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名。

好处:

1、隐藏了实现细节
2、提高了代码的重用性

调用:
    select 函数名(实参列表) 【from 表】;

 特点
    1、叫什么(函数名)
    2、干什么(函数功能)

 函数分类
    单行函数
        比如:concat 、length、ifnull等
    分组函数
        功能:做统计使用,又称为统计函数、聚合函数、组函数

 

2.2.常见函数分类(单行函数

字符函数:
    concat: 拼接
    substr: 截取子串
        索引从1开始
        带长度截取,substring\substr(截取处索引,字符长度)
    upper: 转换成大写
    lower: 转换成小写
    trim: 去前后指定的空格和字符
        去字符时,需要在括号里面加一个单引号引出字符 from 字符对象。例如:select trim (‘a' from ’aaaaaaa张嘴山aaa‘)as 别名;
    ltrim: 去左边空格
    rtrim: 去右边空格
    replace: 替换
    lpad: 左填充
        用指定的字符实现左填充指定长度,例如:select lpad(’尹舒舒‘,10,’*‘)as out_put;输出结果:*******尹舒舒   (10 是字符长度,并不是字节长度)
    rpad: 右填充
    instr: 返回子串第一次出现的索引
    length: 获取字节个数    

 数学函数:
    round: 四舍五入
    rand: 随机数
        返回0-1之间的小数,无限接近1
    floor: 向下取整
        返回<=该参数的最大整数
    ceil: 向上取整
        返回>=该参数的最小整数
    mod: 取余
        取余运算mod(a,b),可以理解为:a-a/b*b
    truncate: 截断

 日期函数:
    now: 当前系统日期+时间
    curdate: 当前系统日期
    curtime: 当前系统时间
    str_to_date: 将字符转换成日期
    date_format: 将日期转换成字符
    datediff:
        返回两个日期相差的天数
    year、month、day、hour、minute、second
        返回年月日时分秒
    monthname:
        以英文形式返回月

 流程控制函数:


    if 处理双分支
        语句结构:
            if(条件表达式,表达式1,表达式2);
                如果条件表达式成立,返回表达式1,否则返回表达式2
            例如:select last_name,commission_pct,if(commission_pct is null, '没奖金’,‘有奖金’ ) as 备注;


    case语句 处理多分支
        情况1:处理等值判断
            语句结构1:
                case   要判断的字段或表达式                                                

                when  常量1   then  要显示的值1或语句1;                                

                when  常量2   then  要显示的值2或语句2;                            

                 ......                                                  

                else   要显示的值n或语句n;                                                

                 end
        情况2:处理条件判断
            语句结构2:
                case                                                                                        

                when 条件1 then 要显示的值1或语句1                                      

                when 条件2 then 要显示的值2或语句2                                                            

                ......                              

                else 要显示的值n或语句n                                                        

                end         

其他函数:
    version: 版本
        当前数据库服务器的版本
    database: 当前库
        当前打开的数据库
    user: 当前连接用户
    password(‘字符’)
        返回该字符的密码形式(自动加密)
    md5(‘字符’)
        返回该字符的md5加密形式 

 

2.3.常见函数分类(分组函数

 count:计算个数
    * 一般选择非空的列:主键
    * count(*)
* max:计算最大值
* min:计算最小值
* sum:计算和
* avg:计算平均值
* 特点:
    1、以上五个分组函数都忽略null值,除了 count(*)
    2、sum和avg一般用于处理数值型,max、min、count可以处理任何数据类型
    3、都可以搭配distinct使用,用于统计去重后的结果
    4、count的参数可以支持:
                * 字段、*、常量值,一般放1
注意:聚合函数的计算,排除null值。
    解决方案:
        * 选择不包含非空的列进行计算
        * IFNULL函数
和分组函数一同查询的字段要求是group by后的字段
*datediff(1,2);日期函数只见可以相减得出天数    

 

三、基础查询 


1.语法 

    格式:

        select 查询列表 from 表名;
       上述格式类似于:java中的打印语句System.out.println(打印东西);


    特点:
        1、查询列表可以是:表中的字段(文件名)、常量值(数值、字符(无字符串说法,都是单引号))、表达式(加减乘除取余等)、函数(java的方法)
        2、查询的结果是一个虚拟的表格


   查询表中所有记录:
    * select * from 表名;

 

2.简单查询

查询前,需要先打开库
    use 库名;


查询表中的单个字段
    select 字段名 from 表名;


多个字段的查询
    select 字段名1,字段名2... from 表名;
    * 注意:
        如果查询所有字段,则可以使用*来替代字段列表。(但顺序是表中一致)
        或者,单击表中的字段数据名,会自动写入其名字,可以自己排序。
        f12——自动格式化。

 

3.起别名 

起别名:
    * as(取别名,as可以省略)
    好处:
        便于理解
        如果要查询的字段有重名的情况,使用别名可以区分开来。
    例如:SELECT 100%98 AS 结果;(as可以省略)
        输出的就是:结果  2;
        清晰明了
    注意:
        取别名,有特殊字符(比如空格,比如#等等),要将别名用双引号引起来(单引也可,建议双引)

 

4.计算列

计算列
    * 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
        +
            只为运算符
            两个操作数都为数值型,则做加法运算
            其中一方为字符型,则mysql试图将字符型数据转换成数值型
                如果转换成功,则继续做加法运算
                如果转换失败,则将字符型数据转换成0
            只要其中一方为null,则结果肯定为null


    * ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
        * 表达式1:哪个字段需要判断是否为null
        * 如果该字段为null后的替换值。

 

5.补充知识

补充知识
    显示表的结构
        desc 表名;


    字段拼接
        concat
            例如:select concat(‘a’,‘b’,‘c’);
            输出:abc


    条件判断函数
        ifnull(判断值,返回值)
            例如:ifnull(”字段为“null,“返回”0);


    去除重复:
        * distinct
            在查询列表前插入即可
                例如:select distinct 字段名 from 表名; 

 

四、条件查询


1.概念

语法格式
    select  查询列表  from  表名  where  筛选条件;
执行顺序
    先表名,再条件,最后查询列表 

2.分类

分类
    一、按条件表达式筛选
        简单条件运算符:> <  =  !=  <>(不等于)  >=  <=


    二、按逻辑表达式筛选
        逻辑运算符:&& || !  and or not


    三、模糊查询
        like、between and、in、is null、is not null
            like特点
                    一般和通配符搭配使用
                    通配符:
                        %  (百分号)任意多个字符,包含0个字符
                        _  (下划线)任意单个字符
                    案例:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
                        select last_name,salary from employees where last_name like‘___e_a%’;
                        通配符中,三个下划线加e加一个下划线加a加%
                    注意:如果想要查询字段中,包含下划线的目标时,因为通配符中有下划线,所以我们需要进行转译操作。在查询字段位置处,加一个\,或者用其他字符,然后在引号后面加escape ‘我们使用的字符’;(推荐escape转译)
                        例如:where last_name like ‘_\_%’;或者where last_name like '_$_% ' escape '$';
            between and特点
                1、使用between and可以提高语句的简洁度
                2、包含临界值
                3、两个临界值不要调换顺序
            in特点
                1、使用 in 可以提高语句简洁度
                2、in 列表的值类型必须一致或兼容
                3、in 列表中不支持通配符的使用
            is null特点
                =或者<>(不等于)不能用于判断null值
                is null 或is not null可以判断null值
                补充:安全等于:<=>
                    <=>
                        既可以判断null值,也可以判断普通类型的数值
                        缺点:可读性不高,容易等于与不等于弄混
                建议用is null 

3.特殊查询案例


    查询员工号为176的员工的姓名和部门号和年薪?

代码如下:

select last_name,department_id,salary*12*(1+if(commission_pct,0)) as 年薪  

from employees  

where department_id=176;

 

五、排序查询


1.概念

语法:
     select
        要查询的东西
    from
        表
    where 
        条件
    order by 排序的字段|表达式|函数|别名 【asc|desc】
    执行顺序:先表,再条件,再查询东西,再排序


排序方式:
    * ASC:升序,默认的
    * DESC:降序


排序特点:
    1、asc是升序,desc是降序,如果不写默认升序
    2、order by 子句中可以支持单个字段、多个字段、表达式、函数、别名
    3、order by 子句一般是放在查询语句的最后面,limit 子句除外。

2.排序分类

1.按单个字段进行排序
2.按多个字段排序
3.按表达式排序
4.按别名排序
5.按函数排序

代码实例(图)

 

 

 

六、分组查询


1.语法概念 

语法
        select 分组函数,列(要求出现在group by的后面)                     

        from 表                                                                                        

      【where 筛选条件】                                      

        group by 分组的列表                                                        

      【order by 子句】
    注意:查询列表必须特殊,要求是分组函数和group by 后出现的字段
    案例:查询每个工种的最高工资
        select MAX    (salary) , job_id   from  employees  group by  job_id;

 
having后可以支持别名
    可以放在group by后,对count等进行查询。
    where 后不可以跟聚合函数,having可以进行聚合函数的判断

2.特点

特点
    1、分组查询中的筛选条件分为两类
        分组前筛选
            数据源:原始表
                位置:group by 子句的前面
                    关键字:where
        分组后筛选
            数据源:分组后的结果集
                位置:group by 子句的后面
                    关键字:having
        分组函数做条件肯定是放在having子句中
        能用分组前筛选的,就优先考虑使用分组前筛选


    2、group by 子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开没有顺序要求),表达式或函数(用得较少)


    3、也可以添加排序(排序放在整个分组查询的最后)order by

 

七、连接查询(重点)


1.背景概念

含义:
    又称多表查询,当查询的字段来自多于多个表时,就会用到连接查询


背景:笛卡尔乘积现象
    表1中有m行,表2有n行,结果等于n*m行
    发生原因:
        没有有效的连接条件
    如何避免:
        添加有效的连接条件

 2.分类

2.1.按年代分类


    sql92标准
        仅仅支持:内连接
        sql92标准等值连接
            1、多表等值连接的结果为多表的交集部分
            2、n表连接,至少需要n-1个连接条件
            3、多表的顺序没有要求
            4、一般需要为表起别名
            5、可以搭配前面介绍的所有子句使用,比如排序、分组、筛选等


    sql99标准(推荐)
        ①、支持:内连接+外连接(左外、右外)+交叉连接
                语法:
                  Select 查询列表
                  From 表1 别名 【连接类型
                  Join 表2 别名
                  On 连接条件
                【where 筛选条件】
                【group by 分组】
                【having 筛选条件】
                【order by 排序列表】


        ②、分类:(写在连接类型处)
            内连接: inner
                语法:
                        Select 查询列表
                        From 表1 别名
                        Inner join 表2 别名
                        On 连接条件;
                特点:
                    ①添加排序、分组、筛选都可以
                    ②inner可以省略
                    ③筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读
                    ④inner join 连接和sql92语法中的等值连接效果是一样的,都是查询多表的交集
            外连接:
                应用场景:
                    用于查询一个表中有,另一个表没有的记录
                特点:
                    1、外连接的查询结果为主表中的所有记录
                        如果从表中有和它匹配的,则显示匹配的值
                        如果从表中没有和它匹配的,则显示null
                        外连接查询结果=内连接结果+主表中有而从表没有的记录
                    2、左外连接,left join 左边的是主表;                                     右外连接,right join 右边的是主表;
                    3、左外和右外交换两个表的顺序,可以实现同样的效果
                    4、全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的
                分类:
                    左外:left 【outer】
                    右外:right【outer】
                    全外:full【outer】

            交叉连接:cross
                就是一个两表笛卡尔乘积


    推荐sql99标准的理由:
        功能:sql99支持的比较多
        可读性:sql99实现连接条件和筛选条件的分离,可读性较高

2.2.按功能分类

按功能分类
    1.内连接
        等值连接            
        非等值连接
        自连接            
    2.外连接
        左外连接
        右外连接
        全外连接
    3.交叉连接

 

3.补充

为表起别名
    好处
        提高语句的简洁度
        区分多个重名的字段
    注意
        如果为表起了别名,则查询的字段就不能使用原来的表名去限定


加筛选条件
    在where语句后面加and子句;

 

八、子查询


1.概念

出现在其他语句内部的select语句,称为子查询或者内查询(外部的查询语句,称为主查询或外查询)
内部嵌套其他select语句的查询,称为外查询或者主查询

 示例代码

 

 

 2.分类

2.1.按子查询出现的位置

select后面:
    仅支持标量子查询
        案例
from后面:
    支持表之查询
    特点:将子查询结果充当一张表,要求必须起别名
    案例:查询每个部门的平均工资的工资等级
where或having后面:
    标量子查询(单行子查询)
        案例:
        
    列子查询(多行子查询)
    行子查询(结果集一行多列或多列多行)
exists后面(相关子查询):
    表子查询
    语法
        exists是完整的语句,结果返回0/1

2.2.按结果集的行列数不同

标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集有一行多列或多行多列)
表子查询(结果集一般为多行多列)

 

3.子查询的特点

1、子查询放在小括号内
2、子查询一般放在条件的右侧
3、标量子查询,一般搭配着单行操作符(>  <  >=  <=   <> )使用
4、列子查询,一般搭配着多行操作符(in、any/some、all)使用
5、子查询的执行优先于主查询执行, 主查询的条件用到了子查询的结果 

 

九、分页查询(limit)


1.应用场景

当要显示的数据,一页显示不全,需要分页提交sql请求。

2.语法

语法
    Select 查询列表
        From 表
      【join type join 表2
        On 连接条件
        Where 筛选条件
        Group by 分组字段
        Having 分组后的筛选
        Order by 排序后的字段】
        Limit 【offset,】size;
                Offset要显示条目的起始索引(起始索引从0开始)
                Size要显示的条目个数


    案例
        查询前五条员工信息
        方法1:select * from employees limit 0,5;
        方法2:select 8 from employees limit 5;

3.分页查询的特点 

特点
    ①limit语句放在查询语句的最后


    ②公式
        要显示的页数 page,每页的条目数size(如下:)

        Select 查询列表
        From 表
        Limit (page-1)*size,size;

 

十、联合查询(union)


union  联合  合并(概念):
    将多条查询语句的结果合并成一个结果。


语法:
               查询语句1                                                                                

                union                                                                                          

               查询语句2                                                                                  

                union                                                                                          

                ............


应用场景:
    要查询的结果来自多个表,且多个表没有直接的连接关系,但查询的信息一致时。


特点:
    1、要求多条查询语句的查询列数是一致的!
    2、要求多条查询语句的查询的每一列的类型和顺序最好一致
    3、union关键字默认去重,如果使用union all可以包含重复项

 

十一:推书


《中国哲学简史》

《蛤蟆先生》

《我想要两颗西柚》

《断舍离》

《解忧杂货店》

《人性的弱点》

......

如果你学不进编程的知识,去看看冯友兰先生的《中国哲学简史》升华自己吧。

如果你觉得生活如一滩死水,失了意义,去看看《蛤蟆先生》的心理历程吧。

如果你对于爱情失了信心,不愿意走出自己的世界,去看看《我想要两颗西柚》的爱情观吧。

如果你总是觉得整个世界都在羁绊着你,让你叫苦不堪,去看看《断舍离》的利落吧。

如果你被忧愁打击,忘了快乐的味道,别怕,去看看东野圭吾《解忧杂货店》的那处港湾吧。 

如果你想更了解自己,也让自己能有能力去了解别人,去看看卡耐基先生的《人性的弱点》吧。

“如果你想看小说,诶!我写了本!要不要看看?点链接直通哦!

昆仑山上人(老爱喝酒的鬼)最新章节免费在线阅读_昆仑山上人小说全文在线阅读-起点中文网

喂喂喂!!

别走啊,点个赞啊...投个推荐票也行啊??

呜呜呜~~

举步维艰啊,生活不易啊,我想恰饭啊,好饿啊!!!”


http://chatgpt.dhexx.cn/article/sfp251oK.shtml

相关文章

大数据开发语言Scala(一)——scala入门

累了&#xff0c;基础配置不想写了&#xff0c;直接抄了→Scala的环境搭建 这里需要注意的是&#xff0c;创建新项目时&#xff0c;不要用默认的Class类&#xff0c;用Object&#xff0c;原因看→scala中的object为什么可以直接运行 一、Scala简介 1.1 图解Scala和Java的关系 1…

10个最佳的大数据处理编程语言

在巨大的数据集中进行筛选的最好工具是什么?通过和数据骇客的交流,我们知道了他们用于硬核数据分析最喜欢的语言和工具包。 R语言 在这些语言名单中,如果R语言排第二,那就没其他能排第一。自1997年以来,作为昂贵的统计软件,如Matlab和SAS的免费替代品,它渐渐风靡全球。…

十分钟带汝入门大数据开发语言Scala

大家好&#xff0c;我是百思不得小赵。 创作时间&#xff1a;2022 年 6 月 7 日 博客主页&#xff1a; &#x1f50d;点此进入博客主页 —— 新时代的农民工 &#x1f64a; —— 换一种思维逻辑去看待这个世界 &#x1f440; 今天是加入CSDN的第1193天。觉得有帮助麻烦&#x1…

学习大数据需要什么语言基础

Python易学&#xff0c;人人都可以掌握&#xff0c;如果零基础入门数据开发行业的小伙伴&#xff0c;可以从Python语言入手。 Python语言简单易懂&#xff0c;适合零基础入门&#xff0c;在编程语言排名上升最快&#xff0c;能完成数据挖掘、机器学习、实时计算在内的各种大数…

大数据分析学习哪些编程语言

大数据分析已成为21世纪最受欢迎的技术之一。由于行业对大数据分析家的需求很高&#xff0c;因此需要具有所需技能的人员才能精通该领域。除了数学技能外&#xff0c;还需要编程专业知识。但是&#xff0c;在获得专业知识之前&#xff0c;有抱负的大数据分析家必须能够对工作所…

大数据处理需要用到的编程语言开发语言

你有一个大数据项目&#xff0c;你知道问题领域&#xff08;problem domain&#xff09;&#xff0c;也知道使用什么基础设施&#xff0c;甚至可能已决定使用哪种框架来处理所有这些数据&#xff0c;但是有一个决定迟迟未能做出&#xff1a;我该选择哪种语言&#xff1f;&#…

大数据常用十种开发语言

随着大数据热潮持续延烧&#xff0c;几乎每个产业都有如洪水般倾泻的信息&#xff0c;面对上万笔的顾客浏览纪录、购买行为数据&#xff0c;如果要用 Excel 来进行数据处理真是太不切实际了&#xff0c;Excel 相较于其他统计软件的功能已相去甚远;但如果只会操作统计软件而不会…

大数据开发都需要掌握哪些编程语言

当前正处在大数据时代背景下,大数据技术目前也正处在落地应用的初期,未来大数据的发展空间还是比较大的,所以学习大数据相关技术是个不错的选择。 大数据编程语言的选择要根据具体的工作岗位来进行,目前大数据领域的工作岗位包括大数据平台研发、大数据应用开发、大数据分…

linux卸载自带java JDK,安装配置java jdk环境

一、卸载 openjdk 1、查看 java 版本时&#xff0c;显示已经安装了 openjdk&#xff0c;需要卸载 [rootxxx ~]# java -version openjdk version "1.8.0_292" OpenJDK Runtime Environment (build 1.8.0_292-b10) OpenJDK 64-Bit Server VM (build 25.292-b10, mixe…

Java 线程安全与锁

多线程内存模型 线程私有栈内存 每个线程 私有的内存区域进程公有堆内存 同一个进程 共有的内存区域 为什么会有线程安全问题&#xff1f; 多个线程同时具有对同一资源的操作权限&#xff0c;又发生了同时对该资源进行读取、写入的情况&#xff0c;那么就会出现重复操作的情…

java线程和锁

锁&#xff0c;是计算机系统中非常常见的技术&#xff0c;实现线程对资源的独占&#xff0c;防止对资源的并发读写造成错误&#xff0c;本文通过从线程&#xff0c;线程状态&#xff0c;到java提供的锁基础&#xff0c;基础的复盘一下线程和锁线程 计算机系统中&#xff0c;经…

Java线程里的14种锁

参考资料: 不可不说的Java“锁”事 java多线程的15种锁 以下内容是参考上面两片文章写出的粗略总结, 想要细究可以看上面两位大佬写的文章, 由于是参考着写的, 所以有很多地方相同, 如果有侵权或不妥的地方还请联系删除. 一. 线程是否同步资源? 1. 悲观锁 : 同步 每次拿数…

Java多线程 各种锁(一篇全搞懂)

Java多线程 锁 文章目录 Java多线程 锁1、乐观锁与悲观锁2、公平锁与非公平锁3、可重入锁与不可重入锁4、独享锁与共享锁5、自旋锁 VS 适应性自旋锁6、无锁 、 偏向锁、量级锁 和 重量级锁&#xff08;难点&#xff09; 1、乐观锁与悲观锁 &#xff08;1&#xff09;悲观锁 对…

Java多线程编程(三)——线程锁

卖票案例 同步代码块解决数据安全问题 同步方法解决数据安全问题 同步方法的格式&#xff1a; 同步方法和同步方法块的区别&#xff1a; 同步静态方法 Lock锁 卖票案例 某电影院目前正在上映国产大片&#xff0c;共有30张票&#xff0c;而它有3个窗口卖票&#xff0c;请…

浅析Java 多线程中的锁

前言 随着互联网技术的快速发展&#xff0c;多线程编程已经成为了现今编程领域中必不可少的知识点之一。Java 是一种广泛使用的编程语言&#xff0c;也是一些底层应用程序和高并发应用程序的首选语言。而 Java 提供的多线程编程机制和相关的锁机制&#xff0c;则成为了 Java 开…

【Java多线程进阶】常见的锁策略

前言 众所周知&#xff0c;拳击运动员是要分等级&#xff08;轻量级、重量级等等&#xff09;来参加比赛的&#xff0c;在 Java 多线程中 锁&#xff08;synchronized&#xff09; 也会根据锁的竞争程度来升级为相关“高等级”锁&#xff0c;为了更好的理解 synchronized 加锁机…

Java多线程下——各类锁的详解

这里写目录标题 各类锁的详解常见的锁策略乐观锁 vs 悲观锁读写锁重量级锁 vs 轻量级锁自旋锁&#xff08;Spin Lock&#xff09;公平锁 vs 非公平锁可重入锁 vs 不可重入锁 CASSynchronized 原理偏向锁锁消除锁粗化 Callable 接口ReentrantLock线程池ExecutorService 和 Execu…

Java中的线程和锁机制

线程池 为什么使用线程池&#xff1f;线程池执行原理&#xff1f;线程池参数有哪些&#xff1f;线程池大小怎么设置&#xff1f;线程池的类型有哪些&#xff1f;适用场景&#xff1f; 进程线程 线程的生命周期讲一下线程中断&#xff1f;创建线程有哪几种方式&#xff1f;什么是…

【Java】中的多线程线程锁

多线程 文章目录 多线程线程的创建和启动sleep()stop() 线程的休眠和中断线程的优先级线程的礼让和加入yield()stop() 线程锁和线程同步synchronized 关键字 死锁概念 wait & notify methodThreadLocal的使用定时器 Timer守护线程再谈集合类parallelStreamforEachOrdered()…

Java多线程中 的各种锁

学习 java 多线程时&#xff0c;最头疼的知识点之一就是 java 中的锁了&#xff0c;什么互斥锁、排它锁、自旋锁、死锁、活锁等等&#xff0c;细分的话可以罗列出 20 种左右的锁&#xff0c;光是看着这些名字就足以让人望而却步了&#xff0c;更别说一个个去理解它们的含义了。…