当前位置: 首页 > news >正文

MYSQL-数据库-DDL-DML-DQL-DCL-基础学习

MySql概念:

        建立在关系模型基础上,有多张相互连接的二维表组成的数据库

SQL通用语法:

        1.SQL语句可以单行或多行书写,以分号结尾

        2.SQL语句可以使用空格/缩进来增强语句的可读性

        3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写

        4.注释

        单行注释:-- 注释内容,或#注释内容(mysql特有)

        多行注释:/*注释内容*/

mysql定义字符集

设置表字符集
alter table 表名 default character set utf8;修改需要插入中文字段的属性
alter table 表名 change 列名 列名 varchar(255) character set utf8;修改数据库字符集
编辑配置文件my.cnf
client下
default-character-set=utf8
mysqld下
character-set-server=utf8
重启mysql
show variables like '%character%'

SQL分类

DDL数据库定义语言,用来定义数据库对象(数据库,表,字段)DML数据库操作语言,用来定义对数据库表中的数据进行增删改DQL数据库查询语言,用来查询数据库中表的记录DCL数据库控制语言,用来创建数据库用户,控制数据库的访问权限

DDL-数据库操作

       查询所有数据库
SHOW DATABASES;
查询当前数据库
SELECT DATABASE();
创建数据库
CREATE DATABASE [IF NOT EXISTS]数据库名 [DEFAULT CHARSET字符集] [COLLATE排序规则];IF NOT EXISTS:数据库不存在的情况下
DEFAULT CHARSET:字符集,可以省略,默认是UTF-8
COLLATE:排序规则
方括号中的东西都是可选的
CREATE DATABASE 表名 CHARACTER SET utf8;
删除数据库
DROP DATABASE 数据库名
使用
USE [if exists]数据库名
方括号表示如果存在,则删除

DDL-表操作-查询

查询当前数据库所有表
SHOW TABLES;
查询表结构
DESC 表名;
查询指定表的建表语句
SHOW CREATE TABLE 表名;

DDL-表操作-创建

创建表
mysql> create table test(-> id int comment '编号',-> name varchar(50) comment '姓名',-> age  int comment '年龄',-> xingbie varchar(1) comment '性别'-> ) comment 'user表';
Query OK, 0 rows affected (0.00 sec)mysql> show tables;
+---------------+
| Tables_in_zhu |
+---------------+
| test          |
+---------------+
1 row in set (0.00 sec)mysql>
这里的test是表名,id,name,age,xingbie是列数,int和varchar是类型,varchar(1)是长度,comment是注释
圆括号外的comment是注释,说明是一个表

DDL表操作-数据类型

数值类型
类型            大小        有符号SIGNED范围        无符号UNSIGNED范围        描述
TINYINT        1byte        -128,127                0,255                小数数值
SMALLINT       2byte        -32768,32767           0,65536               大整数值
MEDIUMINT      3byte        -8388608,8388607       0,16777215            大整数值
INT或INTEGER   4byte        -2147483648,2147483647 0,4294967295          大整数值
BIGINT         8byte        -2^63,2^63-1            0,2^64-1              极大整数1
FLOAT          4byte                                                       单精度浮点值
DOUBLE         8byte                                                         双精度浮点值
DECTMAL                                                                   小数值
字符串类型
类型                大小                    描述
CHAR                0-255bytes            定长字符串
VARCHAR             0-65535bytes          变长字符串
TINYBLOB            0-255bytes            不超过255个字符的二进制数据
TINYTEXT            0-255bytes            短文本字符串
BLOB                0-65 535bytes         长文本数据
MEDIUMBLOB          0-16 777 215 bytes    二进制形式中等长度文本数据
MEDIUMTEXT          0-16 777 215 bytes    中等长度文本数据
LONGBLOB            0-4 294 967 295bytes  二进制形式的极大文本数据
LONGTEXT            0-4 294 967 295bytes  极大文本数据  
日期类型
类型        大小       范围                                    格式            描述
DATE        3        1000-01-01--9999-12-31                YYYY-MM-DD        日期值
TIME        3        -838:59:59--838:59:59                 HH:MM:SS          时间值持续时间
YEAR        1        1901--2155                            YYYY              年份值
DATETIME    8        1000-01-01 00:00:00--9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期时间
TIMESTAMP   4         1970-01-01 00:00:01--2038-01-19 03:14:07 YYYY-MM-DD HH:MM:SS 混合日期和时间值,时间戳   

DDL-表操作-修改

1.添加字段
ALTTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
2.修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧的字段名  新字段名 新类型(长度) [COMMENT 注释][约束];
3.删除字段
ALTER TABLE 表名 DROP 字段名
4.修改表名
ALTER TABLE 表名 RENAME TO 新表名;

5.删除表

DROP TABLE [if exists]表名;  如果存在
TRUNCATE TABLE 表名;    //删除指定表,并且重新创建

DML介绍:

        DML用来对数据库中表的记录进行增删改操作,是数据库的操作语言

添加数据:INSERT
修改数据:UPDATE
删除数据:DELETE

DML-添加数据

1.给指定字段添加数据
1.给指定字段添加数据
INSERT INTO 表名(字段名1,字段名2,....) VALUES(值1,值2,...);2.给全部字段添加数据
INSERT INTO 表名 VALUES(值1,值2);3.批量添加数据
INSERT INTO 表名(字段名1,字段名2,...) VALUES(值1,值2),(值1,值2);
INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...);

注意:

插入数据时,指定的字段顺序需要与值的顺序是一一对应的
字符串和日期型数据应该包含在引号中
插入的数据大小,应该在字段的规定范围内

DML-修改数据

UPDATE 表名 SET 字段名1=值1,字段名2=值2,....[WHERE 条件];注意:修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据

例子:

修改id为1的name值为'你好'
update newtable set name='你好' where id=1;

DML-删除数据

DELETE FROM 表名 [WHERE 条件];

例子:

删除newxingbie为女的所有数据

删除所有数据
DELETE from newtable;

DQL-介绍

DQL数据库查询语言,用来查询数据库中表的记录

查询语句:SELET

DQL-语法:

SELECT字段列表
FROM表名列表
WHERE条件列表
GROUP BY分组字段列表
HAVING分组后条件列表
ORDER BY排序字段列表
LIMIT分页参数
查询分类
基本查询条件查询(WHERE)聚合函数(count,max,avg,sum)分组查询(GROUP BY)排序查询(ORDER BY)分页查询(LIMIT)

DQL-基本查询

1.查询多个字段
SELECT 字段1,字段2,字段3... FROM 表名;
SELECT * FROM 表名;
2.设置别名
SELECT 字段1 [AS 别名],[AS 别名2],....FROM 表名;

例如起字段名为 工作地址

具有一次性,单一性,第二次查询不用as则为原来的样子

如下,没有as也是同样效果,所以as可以省略

3.去除重复记录                                                                           
SELECT DISTINCT 字段列表 FROM 表名;

例如

DML-条件查询

1.语法:

SELECT 字段列表 FROM 表名 WHERE 条件列表;

2.条件

比较运算符                功能
>                        大于
>=                       大于等于
<                        小于           
<=                       小于等于
=                        等于
<>或!=                   不等于
BETWEEN...AND...         在某个范围之内(含量小,最大值)
IN(...)                  在in之后的列表中的值,多选一
LIKE 占位符               模糊匹配(...匹配单个字符,%匹配任意个字符)
IS NULL                  是NULL########################################################################
逻辑运算符                    功能
AND或&&                      并且(多个条件同时成立)
OR或||                       或者(多个条件任意一个成立)
NOT或!                      非,不是
is null的使用
查询有身份证号的员工信息
select * from yg where idcard id is not null;查询没有身份证号的员工信息
select * from yg where idcard id is null

例子

年龄不等于88的员工

年龄在15岁(包含)到20岁(包含)之间的员工信息

还有一个是between...and在某个范围之内的来匹配

性别为女,年龄小于25

or语句使用-查询年龄的等于18或20或40的员工信息

in是满足括号中一个条件即可

筛选名字为两个字的员工like使用
select * from yg where name like '__';

查身份证号最后一位是5的员工like语句

select * from yg where idcard like '%5';
%5代表最后一个字符是5
或者
select * from yg where idcard like '_________________5';
和上一个一样

DQL-聚合函数

1.常见聚合函数
函数        功能
count       统计数量
max         最大值
min         最小值
avg         平均值
sum         求和

语法:

SELECT 聚合函数(字段列表) FROM 表名;

注意:null值不参与聚合运算

1.统计该企业员工数量

2.统计该企业员工的平均年龄

3.统计企业员工最大年龄和最小年龄

4.统计西安地区员工的年龄之和

DQL-分组查询

1.语法
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件]

2.where和having区别

执行时机不同:where是分组之前进行过滤,不满足where条件,而having是分组之后对结果进行过滤
判断条件不同:where不能对聚合函数进行判断,而having可以
3.根据性别分组,统计男员工和女员工的数量

4.根据性别分组,统计男员工和女员工的平均年龄

5.查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于2的工作地址

起别名查询

DQL-排序查询

1.语法:
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式,字段2 排序方式2;
2.排序方式
ASC:升序(默认值)
DESC:降序
3.根据年龄对公司的员工进行升序排序
SELECT * FROM yg ORDER BY age asc;

4.根据入职时间,对员工进行降序排序
SELECT * FROM yg ORDER BY ENDRYDATE DESC;

5.根据年龄对公司的员工尽心升序排序,年龄相同,则按照入职时间降序排序

DQL-分页查询

1.语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;
起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数
分页查询是数据库的方言,不同的数据库有不同的实现,mysql中是LIMIT
如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10
2.查询第一页数据,显示10条记录

起始为:(1-1)*10

或者

2.查询第2页员工数据,每页显示10条记录

查看第1行数据

DQL-案例练习

1.查询年龄为20,21,22,23岁的女性员工信息

2.查询性别为男,并且年龄在20到40岁以内的姓名为三个字的员工

3.查询员工表中,年龄小于60的,男性员工和女性员工的人数

4.查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序

5.查询性别为男,且年龄在20-40岁以内的前5个员工信息,对查询的结果俺年龄升序排序,年龄相同按入职时间排序

DQL-执行顺序

from     表名列表
where    条件列表
group by 分组字段列表
having   分组后条件列表
select   字段列表
order by 排序字段列表
limit    分页参数

DCL数据库控制语言,用来管理数据库用户,控制数据库的访问权限

DCL管理用户

1.查询用户

use  mysql;
select * from user;

2.创建用户

create user '用户名'@'主机名' identifled by '密码';

3.修改用户密码

alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';

4.删除用户

drop user'用户名'@'主机名';
DCL-权限控制

mysql中定义了很多种权限,但是常用的就以下几种

权限                                    说明
ALL,ALL PRIVLEGES                      所有权限
SELECT                                 查询数据
INSERT                                 插入数据
UPDATE                                 修改数据
DELETE                                 删除数据
ALTER                                  修改表
DROP                                   删除数据库/表/视图
CREATE                                 创建数据库/表

 1.查询权限

SHOW GRANTS FOR '用户名'@'主机名';

例子

赋给root@%所有的数据库和表的权限之后如下

2.授予权限

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

授予me用户对于sjk这个数据库的所有权限

授予root@%所有权限对于所有数据库和表

3.撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

撤销root@%的所有权限

相关文章:

MYSQL-数据库-DDL-DML-DQL-DCL-基础学习

MySql概念&#xff1a; 建立在关系模型基础上&#xff0c;有多张相互连接的二维表组成的数据库 SQL通用语法&#xff1a; 1.SQL语句可以单行或多行书写&#xff0c;以分号结尾 2.SQL语句可以使用空格/缩进来增强语句的可读性 3.MySQL数据库的SQL语句不区分大小写&#xff0c;关…...

rv1126解码的一些原理

rv1126解码篇中&#xff0c;出现最重要的两个api一个是&#xff0c;send_vdec_thread线程里面调用的RK_MPI_SYS_SendMediaBuffer&#xff0c;把数据发到解码器。另外一个是read_vdec_thread线程的RK_MPI_SYS_GetMediaBuffer获取解码器里面的数据。 今天想探讨一下他的底层原理。…...

二级公共基础之数据结构与算法篇(七)排序技术

目录 前言 一、交换类排序 1.冒泡排序法 1. 冒泡排序的思想 2. 冒泡排序的实现步骤 3. 示例 4. 冒泡排序的特点 2.快速排序 1. 快速排序的核心思想 2. 快速排序的实现步骤 3. 示例代码(C语言) 4. 快速排序的特点 二、插入类排序 1. 简单插入排序 1.简单插入排…...

深蕾科技智能多媒体SoC产品助力“DataEye剧查查之夜”微短剧盛会

深蕾科技助力微短剧盛会 深圳湾“DataEye剧查查之夜”微短剧盛会&#xff0c;于2025年2月20日18:00点&#xff0c;在深圳湾盛大开启。作为第十四届中国国际新媒体短片节的重要组成部分&#xff0c;“剧查查之夜”汇聚了微短剧行业的顶尖力量&#xff0c;吸引了众多大咖齐聚一堂…...

Apache Doris 实现毫秒级查询响应

1. 引言 1.1 数据分析的重要性 随着大数据时代的到来,企业对实时数据分析的需求日益增长。快速、准确地获取数据洞察成为企业在竞争中脱颖而出的关键。传统的数据库系统在处理大规模数据时往往面临性能瓶颈,难以满足实时分析的需求。例如,一个电商公司需要实时监控销售数据…...

计算机考研之数据结构:P 问题和 NP 问题

在算法的时间复杂度估算中&#xff0c;通常教材和题目中的估算结果包括&#xff1a; O ( 1 ) , O ( log ⁡ n ) , O ( n ) , O ( n ) , O ( n log ⁡ n ) , O ( n 2 ) , O ( n 3 ) , O ( log ⁡ log ⁡ n ) O(1),O(\log{n}),O(\sqrt{n}),O(n),O(n\log{n}),O(n^2),O(n^3),O(\log…...

新数据结构(13)——I/O

字符流 字符输入流&#xff08;Reader&#xff09; 字符输入流用于从数据源&#xff08;如文件、字符串等&#xff09;读取字符数据。Reader 是所有字符输入流的抽象基类。 常用实现类 FileReader 用于从文件中读取字符数据。 InputStreamReader 将字节流转换为字符流&…...

PySide6学习专栏(四):用多线程完成复杂计算任务

如果计程序中要处理一个非常庞大的数据集中的数据&#xff0c;且数据处理计算很复杂&#xff0c;造成数据处理占用大量时间和CPU资源&#xff0c;如果不用多线程&#xff0c;仅在主进程中来处理数据&#xff0c;将会使整个程序卡死&#xff0c;必须采用多线程来处理这些数据是唯…...

Python多线程编程理解面试题解析

一、多线程介绍 Python 的多线程是一种实现并发编程的方式&#xff0c;允许程序同时执行多个任务。然而&#xff0c;由于 Python 的全局解释器锁&#xff08;GIL&#xff09;的存在&#xff0c;多线程在某些场景下可能无法充分利用多核 CPU 的性能。以下是对 Python 多线程的理…...

Flutter - 初体验

项目文件目录结构介绍 注&#xff1a;创建 Flutter 项目名称不要包含特殊字符&#xff0c;不要使用驼峰标识 // TODO 开发中运行一个 Flutter 三种启动方式 Run 冷启动从零开始启动Hot Reload 热重载执行 build 方法Hot Restart 热重启重新运行整个 APP 先看效果&#xff0c…...

使用最广泛的Web应用架构

目前互联网中没有一种绝对使用最广泛的Web应用架构&#xff0c;不同的架构在不同的场景和企业中都有广泛应用&#xff0c;但微服务架构和Serverless架构是当前较为主流和广泛使用的架构。以下是对这两种架构的具体分析&#xff1a; 微服务架构 适用场景广泛 大型互联网公司&a…...

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-split_dota.py

split_dota.py ultralytics\data\split_dota.py 目录 split_dota.py 1.所需的库和模块 2.def bbox_iof(polygon1, bbox2, eps1e-6): 3.def load_yolo_dota(data_root, split"train"): 4.def get_windows(im_size, crop_sizes(1024,), gaps(200,), im_rate_t…...

Unity shader glsl着色器特效之 模拟海面海浪效果

一个简单的海浪效果&#xff0c;通过波的叠加实现水面起伏的动效&#xff0c;根据波峰斜率来为浪花着色&#xff0c;再根据法线贴图和水花贴图来和调整uv的平滑移动来增强海浪移动的细节。如果需要更逼真的效果可以考虑在满足浪花触发的地方添加粒子系统 前置效果图 因为是很久…...

`AdminAdminDTO` 和 `userSession` 对象中的字段对应起来的表格

以下是将更正后的表格放在最前面的回答&#xff0c;表格包含序号列&#xff0c;合并了后端 AdminAdminDTO 和前端 userSession 的所有字段&#xff0c;并标注对方没有的字段。token 字段值用省略号&#xff08;...&#xff09;表示&#xff1a; 序号字段名AdminAdminDTO (后端…...

sqlserver查询内存使用情况的方法

查询 这个SQL查询用于获取当前数据库实例中各个数据库在缓冲池&#xff08;buffer pool&#xff09;中的数据页所占用的内存大小。 select isnull(db_name(database_id),ResourceDb) AS DatabaseName,CAST(COUNT(row_count) * 8.0 /(1024.0) AS DECIMAL(28,2)) AS [size (MB…...

rust笔记7-生命周期显式标注

Rust 的生命周期(Lifetimes)是 Rust 内存安全模型的核心部分,用于确保引用始终有效,避免悬垂引用(Dangling References)。下面我们从生命周期的设计出发点、标注语法以及在不同上下文中的应用(函数、方法、结构体、trait 等)来详细介绍。 1. 生命周期设计的出发点 Rus…...

SQL Server 导入Excel数据

1、选中指定要导入到哪个数据库&#xff0c;右键选择 》任务 》导入数据 2、数据源 选择Excel&#xff0c;点击 下一步(Next) 3、目前 选择OLE DB Provider &#xff0c;点击 下一步&#xff08;Next&#xff09; 4、默认 &#xff0c;点击 下一步&#xff08;Next&#xff09;…...

【笔记】LLM|Ubuntu22服务器极简本地部署DeepSeek+联网使用方式

2025/02/18说明&#xff1a;2月18日~2月20日是2024年度博客之星投票时间&#xff0c;走过路过可以帮忙点点投票吗&#xff1f;我想要前一百的实体证书&#xff0c;经过我严密的计算只要再拿到60票就稳了。一人可能会有多票&#xff0c;Thanks♪(&#xff65;ω&#xff65;)&am…...

【面试题】2025.02.19-前端面试题汇总

杭州三汇 1. 自我介绍 2. 你们前端项目为什么要用微前端&#xff1f; 减少由于程序更新导致的问题影响面积&#xff1b;缩小前端包体积&#xff0c;加快页面开发速度&#xff1b;便于统一多家医院某几个系统的程序一直&#xff1b; 3. 详细介绍一个项目&#xff0c;项目干什…...

小米AX3000T 路由器如何开启 SSH 安装 OpenWRT 系统,不需要降级 v1.0.91 (2025)

小米AX3000T 路由器如何开启 SSH 安装 OpenWRT 系统&#xff0c;不需要降级 v1.0.91 &#xff08;2025&#xff09; 本文内容需要你有一定的 Linux 操作基础&#xff0c;最好是程序员那种&#xff0c;英文水平足够用才行。一般人不需要使用这么复杂的路由器操作系统&#xff0c…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...