MySQL - 初识小记

遇见

大伙可以先呼出自己的 任务管理器（俺是 windows ，快捷键 CTRL + SHIFT + ESC ）--> 第一栏第一个 就是进程。

什么是进程？

进程是资源分配的基本单位，是操作系统的一个执行单元，我们的计算机上有很多的程序，比如微信，qq ，网易云音乐等，每一个正在运行的程序可以被称为一个 进程。每个进程都有独立的内存空间、代码和数据 ；每个进程都有一个唯一 的进程 id . 大伙电脑如果开启了 mysql 服务的话，进程里面就能找到 mysql 的进程 id 了 ---> mysqld。如图所示

（我有两个是因为 我安装了两种版本的 mysql，一个 5.7 一个 8.0）

连接 MySQL

win+r 输入 “cmd” 打开命令行窗口 ， 输入 ：

Copy
mysql -hlocalhost -u root -p

-hlocalhost 如果是在自己电脑上的话 也能省略 -u 后面可以有空格 ，但是 - p 后面不能有。 上面隐式输入密码，不会被别人看见，回车之后，接下来输入密码就成。

进程间通信的方式？

俺用用风趣幽默词来表达吧，如果想看 正式一点的 可以看下面 。

管道（Pipe）：想象一下，两个进程在用一个吸管传递秘密信息。管道是单向的，数据只能从一端流向另一端，就像吸管里的果汁一样。

命名管道（Named Pipe）：这是管道的升级版，它有名字了！这样，不同的进程就可以通过这个名字找到它，进行双向通信，就像两个人用对讲机一样。

信号（Signal）：进程之间的拍手游戏。一个进程给另一个进程发送一个信号，告诉它发生了什么事件，就像拍手表示 “你被发现了”。

消息队列（Message Queue）：进程间的邮局。进程将消息放入队列，另一个进程从队列中取出消息。就像寄信一样，只不过这个邮局的效率非常高。

共享内存（Shared Memory）：进程间共享一块内存空间，就像一块公共的黑板，大家都可以在上面写字和擦掉字。这种方式速度很快，但要注意避免写字时的混乱。

套接字（Socket）：进程间的电话。套接字允许不同进程、甚至不同计算机之间进行通信，就像打电话一样。只要知道对方的电话号码（IP 地址和端口号），就可以开始通话了。

管道 pipe： 管道是一种半双工的通信方式，数据只能单向流动，而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
命名管道 FIFO： 有名管道也是半双工的通信方式，但是它允许无亲缘关系进程间的通信。
消息队列 MessageQueue： 消息队列是由消息的链表，存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
共享内存 SharedMemory：共享内存就是映射一段能被其他进程所访问的内存，这段共享内存由一个进程创建，但多个进程都可以访问。共享内存是最快的 IPC 方式，它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制，如信号量，配合使用，来实现进程间的同步和通信。
套接字 Socket： 套接字也是一种进程间通信机制，与其他通信机制不同的是，它可用于不同及其间的进程通信。
信号 (sinal) ： 信号是一种比较复杂的通信方式，用于通知接收进程某个事件已经发生。

MySQL 支持进程间的通信方式？

命名管道和共享内存

Unix 域套接字文件

TCP/IP ： 通过 ip + 端口号 来进行通信 本质上属于 “套接字 Socket” 通信

进程和端口号 是两个不同的概念，端口号是用于在网络通信中标识特定进程的数字，也就是说 并非每个进程都有端口号，而是 那些需要进行通信的进程，才会使用端口号。 端口号可以预先分配 ，比如 HTTP 通信的 80 端口 而 HTTPS 是 443 ，我们的 mysql 服务启动的时候 会默认申请 3306 端口号

MySQL 存储引擎

这里先来聊聊 存储引擎吧，毕竟数据都是存在存储引擎里面的。
这里只谈两个比较常见的的 InnoDB 、MyISAM

InnoDB：

支持事务（Transaction）：InnoDB 提供了提交（commit）和回滚（rollback）功能，确保数据的完整性和一致性。

支持行级锁定（Row-level Locking）：在并发操作时，InnoDB 可以锁定被修改的单行数据，提高了并发性能。

支持外键（Foreign Key）：InnoDB 支持引用完整性约束，有助于维护数据库的关系完整性。

支持 MVCC（多版本并发控制）：这有助于在高并发场景下提高读取性能。

MyISAM：

不支持事务：MyISAM 不提供事务支持，因此在需要事务处理的场景中不太适用。

表级锁定（Table-level Locking）：MyISAM 在进行写操作时会锁定整个表，可能导致并发性能较低。

不支持外键：MyISAM 不支持引用完整性约束。

更小的存储空间：MyISAM 通常占用较少的磁盘空间，因为它不需要存储事务和行级锁定的相关信息。

InnoDB 与 MyISAM 的异同：
相同点：

都是 MySQL 的存储引擎，用于存储和管理数据。

不同点：

事务支持：InnoDB 支持事务，而 MyISAM 不支持。

锁定机制：InnoDB 使用行级锁定，MyISAM 使用表级锁定。

外键支持：InnoDB 支持外键，而 MyISAM 不支持。

存储空间：InnoDB 通常占用更多的磁盘空间，而 MyISAM 占用较少。

并发性能：InnoDB 在高并发场景下通常表现更好，因为它支持行级锁定和 MVCC。

根据不同场景选择不同的存储引擎 ，如果需要事务支持和高并发性能，InnoDB 会好一点。如果不需要事务支持，且对存储空间有较高要求，可以考虑使用 MyISAM。

最后我想谈的一点区别是：

在 InnoDB 中 数据即索引 索引即数据 而在 MyISAM 中 索引是索引 数据是数据

稍微解释一下 :

InnoDB 中 "数据即索引，索引即数据"：InnoDB 使用聚簇索引来存储数据。在聚簇索引中，数据行与主键索引紧密结合在一起，按照主键的顺序存储。这意味着数据和索引实际上是一体的，无法分离。当我们查询数据时，通过主键索引就可以直接找到对应的数据行，无需额外的数据查找过程。

MyISAM 中 "索引是索引，数据是数据"：MyISAM 使用非聚簇索引来存储数据。在非聚簇索引中，数据行和索引是分开存储的。索引中只包含索引键值和指向实际数据行的指针。当我们查询数据时，首先需要在索引中查找，然后通过指针找到实际的数据行。这个过程被称为 "回表"。

总结一下，InnoDB 中的数据和索引是紧密结合在一起的，查询时无需额外的数据查找过程。而在 MyISAM 中，数据和索引是分开存储的，查询时需要通过索引找到数据行的指针，然后再获取实际的数据。这就是 "InnoDB 中数据即索引，索引即数据；而在 MyISAM 中，索引是索引，数据是数据" 的含义。

😭

先写这点吧 ，码字还是比较耗时间的，害，感觉 写着写着 都是很常见的内容，再往后也是，有点不知道要怎么分享了😰 。