mysql讲解2 之事务 索引 以及权限等

news2024/11/16 15:37:45

系列文章目录

mysql 讲解一 博客链接
点击此处即可


文章目录

  • 系列文章目录
  • 一、事务
    • 1.1 事务的四个原则
    • 1.2 脏读 不可重复读 幻读
  • 二、索引
  • 三,数据库用户管理
  • 四、mysql备份


一、事务

1.1 事务的四个原则

什么是事务

事务就是将一组SQL语句放在同一批次内去执行

如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行

MySQL事务处理只支持InnoDB和BDB数据表类型

事务的ACID原则 百度 ACID

原子性(Atomic)

整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(ROLLBACK)到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性(Consist)

一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。也就是说:如果事务是并发多个,系统也必须如同串行事务一样操作。其主要特征是保护性和不变性(Preserving an Invariant),以转账案例为例,假设有五个账户,每个账户余额是100元,那么五个账户总额是500元,如果在这个5个账户之间同时发生多个转账,无论并发多少个,比如在A与B账户之间转账5元,在C与D账户之间转账10元,在B与E之间转账15元,五个账户总额也应该还是500元,这就是保护性和不变性。

隔离性(Isolated)

隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。

持久性(Durable)

在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

1.2 脏读 不可重复读 幻读

什么是脏读、不可重复读、幻读?

脏读

脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。

    比如在事务 A 修改数据之后提交数据之前,这时另一个事务 B 来读取数据,如果不加控制,事务 B 读取到 A 修改过数据,之后 A 又对数据做了修改再提交,则 B 读到的数据是脏数据,此过程称为脏读。

不可重复读

不可重复读是指在数据库访问中,一个事务范围内多次查询却返回了不同的数据值。这是由于在查询间隔中,其他事务修改并提交而引起的。

    比如事务 T1 读取某一数据,事务 T2 读取并修改了该数据,T1 为了对读取值进行检验而再次读取该数据,便得到了不同的结果。

幻读

幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。

    比如事务 A 在按查询条件读取某个范围的记录时,事务 B 又在该范围内插入了新的满足条件的记录,当事务 A 再次按条件查询记录时,会产生新的满足条件的记录。

二、索引

索引的作用

提高查询速度

确保数据的唯一性

可以加速表和表之间的连接 , 实现表与表之间的参照完整性

使用分组和排序子句进行数据检索时 , 可以显著减少分组和排序的时间

全文检索字段进行搜索优化.

分类

主键索引 (Primary Key)

唯一索引 (Unique)

常规索引 (Index)

全文索引 (FullText)

主键索引

主键 : 某一个属性组能唯一标识一条记录

特点 :

最常见的索引类型

确保数据记录的唯一性

确定特定数据记录在数据库中的位置

唯一索引

作用 : 避免同一个表中某数据列中的值重复

与主键索引的区别

主键索引只能有一个

唯一索引可能有多个

CREATE TABLE Grade(
GradeID INT(11) AUTO_INCREMENT PRIMARYKEY,
GradeName VARCHAR(32) NOT NULL UNIQUE
– 或 UNIQUE KEY GradeID (GradeID)
)
常规索引

作用 : 快速定位特定数据

注意 :

index 和 key 关键字都可以设置常规索引

应加在查询找条件的字段

不宜添加太多常规索引,影响数据的插入,删除和修改操作

CREATE TABLE result(
– 省略一些代码
INDEX/KEY ind (studentNo,subjectNo) – 创建表时添加
)
– 创建后添加
ALTER TABLE result ADD INDEX ind(studentNo,subjectNo);
全文索引

百度搜索:全文索引

作用 : 快速定位特定数据

注意 :

只能用于MyISAM类型的数据表

只能用于CHAR , VARCHAR , TEXT数据列类型

适合大型数据集

#方法一:创建表时
  CREATE TABLE 表名 (
字段名1 数据类型 [完整性约束条件…],
字段名2 数据类型 [完整性约束条件…],
[UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY
[索引名] (字段名[(长度)] [ASC |DESC])
);

#方法二:CREATE在已存在的表上创建索引
CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名
ON 表名 (字段名[(长度)] [ASC |DESC]) ;

#方法三:ALTER TABLE在已存在的表上创建索引
ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX
索引名 (字段名[(长度)] [ASC |DESC]) ;

#删除索引:DROP INDEX 索引名 ON 表名字;
#删除主键索引: ALTER TABLE 表名 DROP PRIMARY KEY;

#显示索引信息: SHOW INDEX FROM student;
*/

/增加全文索引/
ALTER TABLE school.student ADD FULLTEXT INDEX studentname (StudentName);

explain

/EXPLAIN : 分析SQL语句执行性能/
EXPLAIN SELECT * FROM student WHERE studentno=‘1000’;

/使用全文索引/
– 全文搜索通过 MATCH() 函数完成。
– 搜索字符串作为 against() 的参数被给定。搜索以忽略字母大小写的方式执行。对于表中的每个记录行,MATCH() 返回一个相关性值。即,在搜索字符串与记录行在 MATCH() 列表中指定的列的文本之间的相似性尺度。
EXPLAIN SELECT *FROM student WHERE MATCH(studentname) AGAINST(‘love’);

/*
开始之前,先说一下全文索引的版本、存储引擎、数据类型的支持情况

MySQL 5.6 以前的版本,只有 MyISAM 存储引擎支持全文索引;
MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存储引擎均支持全文索引;
只有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引。
测试或使用全文索引时,要先看一下自己的 MySQL 版本、存储引擎和数据类型是否支持全文索引。
*/

拓展:测试索引

建表app_user:

CREATE TABLE app_user (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
name varchar(50) DEFAULT ‘’ COMMENT ‘用户昵称’,
email varchar(50) NOT NULL COMMENT ‘用户邮箱’,
phone varchar(20) DEFAULT ‘’ COMMENT ‘手机号’,
gender tinyint(4) unsigned DEFAULT ‘0’ COMMENT ‘性别(0:男;1:女)’,
password varchar(100) NOT NULL COMMENT ‘密码’,
age tinyint(4) DEFAULT ‘0’ COMMENT ‘年龄’,
create_time datetime DEFAULT CURRENT_TIMESTAMP,
update_time timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=‘app用户表’
批量插入数据:100w

DROP FUNCTION IF EXISTS mock_data;
DELIMITER $$
CREATE FUNCTION mock_data()
RETURNS INT
BEGIN
DECLARE num INT DEFAULT 1000000;
DECLARE i INT DEFAULT 0;
WHILE i < num DO
INSERT INTO app_user(name, email, phone, gender, password, age)
VALUES(CONCAT(‘用户’, i), ‘24736743@qq.com’, CONCAT(‘18’, FLOOR(RAND()*(999999999-100000000)+100000000)),FLOOR(RAND()*2),UUID(), FLOOR(RAND()*100));
SET i = i + 1;
END WHILE;
RETURN i;
END;
SELECT mock_data();

索引效率测试

无索引

SELECT * FROM app_user WHERE name = ‘用户9999’; – 查看耗时
SELECT * FROM app_user WHERE name = ‘用户9999’;
SELECT * FROM app_user WHERE name = ‘用户9999’;

mysql> EXPLAIN SELECT * FROM app_user WHERE name = ‘用户9999’\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: app_user
partitions: NULL
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 992759
filtered: 10.00
Extra: Using where
1 row in set, 1 warning (0.00 sec)
创建索引

CREATE INDEX idx_app_user_name ON app_user(name);
测试普通索引

mysql> EXPLAIN SELECT * FROM app_user WHERE name = ‘用户9999’\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: app_user
partitions: NULL
type: ref
possible_keys: idx_app_user_name
key: idx_app_user_name
key_len: 203
ref: const
rows: 1
filtered: 100.00
Extra: NULL
1 row in set, 1 warning (0.00 sec)

mysql> SELECT * FROM app_user WHERE name = ‘用户9999’;
1 row in set (0.00 sec)

mysql> SELECT * FROM app_user WHERE name = ‘用户9999’;
1 row in set (0.00 sec)

mysql> SELECT * FROM app_user WHERE name = ‘用户9999’;
1 row in set (0.00 sec)

索引准则

索引不是越多越好

不要对经常变动的数据加索引

小数据量的表建议不要加索引

索引一般应加在查找条件的字段

索引的数据结构

– 我们可以在创建上述索引的时候,为其指定索引类型,分两类
hash类型的索引:查询单条快,范围查询慢
btree类型的索引:b+树,层数越多,数据量指数级增长(我们就用它,因为innodb默认支持它)

– 不同的存储引擎支持的索引类型也不一样
InnoDB 支持事务,支持行级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;
MyISAM 不支持事务,支持表级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;
Memory 不支持事务,支持表级别锁定,支持 B-tree、Hash 等索引,不支持 Full-text 索引;
NDB 支持事务,支持行级别锁定,支持 Hash 索引,不支持 B-tree、Full-text 等索引;
Archive 不支持事务,支持表级别锁定,不支持 B-tree、Hash、Full-text 等索引;

三,数据库用户管理

对于用户的管理 比如添加用户删除用户或者给用户授予权限,其实都是在修改mysql中的user表

首先如果我们使用sqlyog的话,可以直接可视化创建用户以及其权限。

在这里插入图片描述
基本命令

/* 用户和权限管理 */ ------------------
用户信息表:mysql.user

– 刷新权限
FLUSH PRIVILEGES

– 增加用户
CREATE USER kuangshen IDENTIFIED BY ‘123456’
CREATE USER 用户名 IDENTIFIED BY [PASSWORD] 密码(字符串)

  • 必须拥有mysql数据库的全局CREATE USER权限,或拥有INSERT权限。
  • 只能创建用户,不能赋予权限。
  • 用户名,注意引号:如 ‘user_name’@‘192.168.1.1’
  • 密码也需引号,纯数字密码也要加引号
  • 要在纯文本中指定密码,需忽略PASSWORD关键词。要把密码指定为由PASSWORD()函数返回的混编值,需包含关键字PASSWORD

– 重命名用户 RENAME USER kuangshen TO kuangshen2
RENAME USER old_user TO new_user

– 设置密码
SET PASSWORD = PASSWORD(‘密码’) – 为当前用户设置密码
SET PASSWORD FOR 用户名 = PASSWORD(‘密码’) – 为指定用户设置密码

– 删除用户 DROP USER kuangshen2
DROP USER 用户名

– 分配权限/添加用户
GRANT 权限列表 ON 表名 TO 用户名 [IDENTIFIED BY [PASSWORD] ‘password’]
比如 给cky这个用户 添加所有的权限
GRANT ALL PRIVILEGES ON . TO cky
注意:ALL PRIVILEGES 并不包含 授予权限

例如:
在添加用户的同时 也授予了权限

GRANT ALL PRIVILEGES ON . TO ‘cky4’ IDENTIFIED BY ‘123456’
GRANT ALL PRIVILEGES ON . TO ‘cky3’@‘%’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;

  • all privileges 表示所有权限
  • . 表示所有库的所有表
  • 库名.表名 表示某库下面的某表

– 查看权限
SHOW GRANTS FOR root@localhost;查看本地root权限
SHOW GRANTS FOR 用户名 查看某个具体用户
– 查看当前用户权限
SHOW GRANTS; 或 SHOW GRANTS FOR CURRENT_USER; 或 SHOW GRANTS FOR CURRENT_USER();

– 撤消权限
REVOKE 权限列表 ON 表名 FROM 用户名
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 用户名 – 撤销所有权限

权限解释

– 权限列表
ALL [PRIVILEGES] – 设置除GRANT OPTION之外的所有简单权限
ALTER – 允许使用ALTER TABLE
ALTER ROUTINE – 更改或取消已存储的子程序
CREATE – 允许使用CREATE TABLE
CREATE ROUTINE – 创建已存储的子程序
CREATE TEMPORARY TABLES – 允许使用CREATE TEMPORARY TABLE
CREATE USER – 允许使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES。
CREATE VIEW – 允许使用CREATE VIEW
DELETE – 允许使用DELETE
DROP – 允许使用DROP TABLE
EXECUTE – 允许用户运行已存储的子程序
FILE – 允许使用SELECT…INTO OUTFILE和LOAD DATA INFILE
INDEX – 允许使用CREATE INDEX和DROP INDEX
INSERT – 允许使用INSERT
LOCK TABLES – 允许对您拥有SELECT权限的表使用LOCK TABLES
PROCESS – 允许使用SHOW FULL PROCESSLIST
REFERENCES – 未被实施
RELOAD – 允许使用FLUSH
REPLICATION CLIENT – 允许用户询问从属服务器或主服务器的地址
REPLICATION SLAVE – 用于复制型从属服务器(从主服务器中读取二进制日志事件)
SELECT – 允许使用SELECT
SHOW DATABASES – 显示所有数据库
SHOW VIEW – 允许使用SHOW CREATE VIEW
SHUTDOWN – 允许使用mysqladmin shutdown
SUPER – 允许使用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET GLOBAL语句,mysqladmin debug命令;允许您连接(一次),即使已达到max_connections。
UPDATE – 允许使用UPDATE
USAGE – “无权限”的同义词
GRANT OPTION – 允许授予权限

四、mysql备份

数据库备份必要性

保证重要数据不丢失

数据转移

MySQL数据库备份方法

mysql备份方法

①数据库管理工具,如SQLyog

②直接拷贝数据库文件和相关配置文件

③命令行 mysqldump命令

作用 :

转储数据库

搜集数据库进行备份

将数据转移到另一个SQL服务器,不一定是MySQL服务器

导出

  1. 导出一张表 – mysqldump -uroot -p123456 school student >D:/a.sql
     语法: mysqldump -u用户名 -p密码 库名 表名 > 文件名(D:/a.sql)
  2. 导出多张表 – mysqldump -uroot -p123456 school student result >D:/a.sql
      mysqldump -u用户名 -p密码 库名 表1 表2 表3 > 文件名(D:/a.sql)
  3. 导出所有表 – mysqldump -uroot -p123456 school >D:/a.sql
      mysqldump -u用户名 -p密码 库名 > 文件名(D:/a.sql)
  4. 导出一个库 – mysqldump -uroot -p123456 -B school >D:/a.sql
      mysqldump -u用户名 -p密码 -B 库名 > 文件名(D:/a.sql)

可以-w携带备份条件

导入

  1. 在登录mysql的情况下:-- source D:/a.sql 推荐
       source 备份文件位置
  2. 在不登录的情况下
      mysql -u用户名 -p密码 库名 < 备份文件

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

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

相关文章

深入研究SVN代码检查的关键工具:svnchecker vs. SonarQube

目录 一、SVN代码检查(整合svnchecker)1、创建SVN代码库2、下载安装包3、修改SVN配置4、新建代码检查配置文件(名称自定义)5、hooks目录添加配置文件6、设置只对Java文件进行检查7、测试 二、SonarQube代码检测1、什么是SonarQube2、MySQL数据库的安装3、SonarQube服务端软件安…

Linux系统编程——修改配置文件(应用)

该应用主要调用到strstr函数&#xff0c;我们只需调用该函数并传入相关文件和修改数值即可&#xff0c;下面就是对strstr函数的定义解读以及实现案例 1.调用strstr函数需要包含以下头文件 #include<string.h>2.函数定义格式 char *strstr(char *str1, const char *str…

springboot苍穹外卖实战:十、缓存菜品(手动用redisTemplate实现缓存逻辑)+缓存套餐(Spring cache实现)

缓存菜品 缺点 缓存和数据库的数据一致性通常解决方案&#xff1a;延时双删、异步更新缓存、分布式锁。 该项目对于缓存菜品的处理较为简单&#xff0c;实际可以用管道技术提高redis的操作效率、同时cache自身有注解提供使用。 功能设计与缓存设计 建议这部分去看下原视频&…

吃透 Spring 系列—MVC部分

目录 ◆ SpringMVC简介 - SpringMVC概述 - SpringMVC快速入门 - Controller中访问容器中的Bean - SpringMVC关键组件浅析 ◆ SpringMVC的请求处理 - 请求映射路径的配置 - 请求数据的接收 - Javaweb常用对象获取 - 请求静态资源 - 注解驱动 标签 ◆ SpringMV…

【JUC】二、线程间的通信(虚假唤醒)

文章目录 0、多线程编程的步骤1、wait和notify2、synchronized下实现线程的通信&#xff08;唤醒&#xff09;3、虚假唤醒4、Lock下实现线程的通信&#xff08;唤醒&#xff09;5、线程间的定制化通信 0、多线程编程的步骤 步骤一&#xff1a;创建&#xff08;将来被共享的&am…

FD-Align论文阅读

FD-Align: Feature Discrimination Alignment for Fine-tuning Pre-Trained Models in Few-Shot Learning&#xff08;NeurIPS 2023&#xff09; 主要工作是针对微调的和之前的prompt tuining&#xff0c;adapter系列对比 Motivation&#xff1a; 通过模型对虚假关联性的鲁棒…

联想小新Pro14默认设置的问题

联想小新Pro14 锐龙版&#xff0c;Win11真的挺多不习惯的&#xff0c;默认配置都不符合一般使用习惯。 1、默认人走过自动开机。人机互动太强了&#xff1b; 2、默认短超时息屏但不锁屏&#xff0c;这体验很容易觉得卡机然后唤起&#xff0c;却又不用密码打开&#xff1b; 3…

(头哥)多表查询与子查询

目录 第1关&#xff1a;查询每个学生的选修的课程信息 第2关&#xff1a;查询选修了“数据结构”课程的学生名单 第3关&#xff1a;查询“数据结构”课程的学生成绩单 第4关&#xff1a;查询每门课程的选课人数 第5关&#xff1a;查询没有选课的学生信息 第6关&#xff1a…

Linux下C++调用python脚本实现LDAP协议通过TNLM认证连接到AD服务器

1.前言 首先要实现这个功能&#xff0c;必须先搞懂如何通过C调用python脚本文件最为关键&#xff0c;因为两者的环境不同。本质上是在 c 中启动了一个 python 解释器&#xff0c;由解释器对 python 相关的代码进行执行&#xff0c;执行完毕后释放资源。 2 模块功能 2.1python…

设计模式1

![在这里插入图片描述](https://img-blog.csdnimg.cn/c9fbecf1ae89436095885722380ea460.png)一、设计模式分类&#xff1a; 1、创建型模式&#xff1a;创建与使用分离&#xff0c;单例、原型、工厂、抽象、建造者。 2、结构型模式&#xff1a;用于描述如何将对象按某种更大的…

01-Spring中的工厂模式

工厂模式 工厂模式的三种形态: 工厂模式是解决对象创建问题的属于创建型设计模式,Spring框架底层使用了大量的工厂模式 第一种&#xff1a;简单工厂模式是工厂方法模式的一种特殊实现,简单工厂模式又叫静态工厂方法模式不属于23种设计模式之一第二种&#xff1a;工厂方法模式…

Leetcode—234.回文链表【简单】

2023每日刷题&#xff08;二十七&#xff09; Leetcode—234.回文链表 直接法实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ bool isPalindrome(struct ListNode* head) {if(head NULL) {return t…

【mysql】CommunicationsException: Communications link failure

CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. 通信异常&#xff1a;通信链路故障 最后一个成功发送到服务器的数据包是0毫秒前…

华为ensp:ospf末梢stub完全末梢totally Stub

现在宣告都宣告完了&#xff0c;现在要给area1做完全末梢 末梢区域 进入r2系统视图模式 ospf 1area 1 stub quit进入r1系统视图 ospf 1 area 1 stub quit 现在去r1上查看 末梢成功 完全末梢 进入r2系统视图 ospf 1 area 1stub no-summary 现在就成为完全末梢了&…

YOLOv8-Seg改进: 分割小目标系列篇 | 小目标分割到大目标分割一网打尽的GFPN

🚀🚀🚀本文改进:一种新的路径融合GFPN,包含跳层与跨尺度连接,助力YOLOv8-seg Neck,实现创新 🚀🚀🚀GFPN在不同分割场景均有涨点的表现,尤其适合存在不同大小分割尺寸的场景 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,…

计算机毕业设计选题推荐-校园交流平台微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

1204. 错误票据

题目&#xff1a; 1204. 错误票据 - AcWing题库 思路&#xff1a; 将输入的数据存入数组&#xff0c;从小到大排序后遍历&#xff0c;若 (a[i] a[i - 1])res1 a[i]--->重号;若(a[i] - a[i - 1] > 2)res2 a[i] - 1--->断号。 难点&#xff1a;题目只告诉我们输入…

【Linux】:静动态库

静动态库 一.静态库1.设计静态库2.生成静态库3.发布静态库4.使用静态库 二.动态库1.设计动态库2.生成和发布动态库3.使用 一.静态库 程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。 静态库链接格式&#xff1a;libxxx.a(前缀是lib,后缀是…

【数字图像处理】RGB 转灰度图

常见的数字图像格式有 RGB, RGBA, YCbCr 等&#xff0c;RGB/RGBA 格式适合存储&#xff0c;而 YCbCr 格式适合图像处理。在数字图像处理中&#xff0c;通常需要将 RGB 格式的图像变换为灰度图&#xff0c;再进行后续的处理&#xff0c;例如边缘检测、锐化等。本文主要介绍数字图…

数据结构 树和二叉树

敬请期待 1. 术语详解 树&#xff1a; 二叉树&#xff1a; 森林&#xff1a; 完全二叉树&#xff1a; 满二叉树&#xff1a; 二叉排序树&#xff1a; 二叉搜索树&#xff1a; 哈夫曼树&#xff1a;分为左小右大和左先右后两种构造方法。 平衡二叉树&#xff1a; 线索…