Palai

Palai

程序员 | 开源爱好者 | 喜欢交友

MySQL - 初识小记

遇见#

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

image

什么是进程?#

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

mysqlid
(我有两个是因为 我安装了两种版本的 mysql,一个 5.7 一个 8.0)

连接 MySQL#

win+r 输入 “cmd” 打开命令行窗口 , 输入 :

mysql -hlocalhost -u root -p

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

进程间通信的方式?#

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

  1. 管道(Pipe):想象一下,两个进程在用一个吸管传递秘密信息。管道是单向的,数据只能从一端流向另一端,就像吸管里的果汁一样。

  2. 命名管道(Named Pipe):这是管道的升级版,它有名字了!这样,不同的进程就可以通过这个名字找到它,进行双向通信,就像两个人用对讲机一样。

  3. 信号(Signal):进程之间的拍手游戏。一个进程给另一个进程发送一个信号,告诉它发生了什么事件,就像拍手表示 “你被发现了”。

  4. 消息队列(Message Queue):进程间的邮局。进程将消息放入队列,另一个进程从队列中取出消息。就像寄信一样,只不过这个邮局的效率非常高。

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

  6. 套接字(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:

  1. 支持事务(Transaction):InnoDB 提供了提交(commit)和回滚(rollback)功能,确保数据的完整性和一致性。
  2. 支持行级锁定(Row-level Locking):在并发操作时,InnoDB 可以锁定被修改的单行数据,提高了并发性能。
  3. 支持外键(Foreign Key):InnoDB 支持引用完整性约束,有助于维护数据库的关系完整性。
  4. 支持 MVCC(多版本并发控制):这有助于在高并发场景下提高读取性能。

MyISAM:

  1. 不支持事务:MyISAM 不提供事务支持,因此在需要事务处理的场景中不太适用。
  2. 表级锁定(Table-level Locking):MyISAM 在进行写操作时会锁定整个表,可能导致并发性能较低。
  3. 不支持外键:MyISAM 不支持引用完整性约束。
  4. 更小的存储空间:MyISAM 通常占用较少的磁盘空间,因为它不需要存储事务和行级锁定的相关信息。

InnoDB 与 MyISAM 的异同:
相同点:

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

不同点:

  1. 事务支持:InnoDB 支持事务,而 MyISAM 不支持。
  2. 锁定机制:InnoDB 使用行级锁定,MyISAM 使用表级锁定。
  3. 外键支持:InnoDB 支持外键,而 MyISAM 不支持。
  4. 存储空间:InnoDB 通常占用更多的磁盘空间,而 MyISAM 占用较少。
  5. 并发性能:InnoDB 在高并发场景下通常表现更好,因为它支持行级锁定和 MVCC。

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

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

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

稍微解释一下 :

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

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

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

😭#

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

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。