注意:这里所使用的数据库都是MySql
1、什么是数据库
首先,要聊数据库,那么,数据库是什么肯定是需要讲清楚的。
我们在自己的 Linux 上所安装的 MySql 里面包含了两个:mysql,mysqld
eg:
root@LAPTOP-UVPN73B8:~# which mysql
/usr/bin/mysql
root@LAPTOP-UVPN73B8:~# which mysqld
/usr/sbin/mysqld
(以我的 Linux 为例)
mysql:这个 mysql 就是我们使用的客户端。
mysqld:这个 mysqld 就是客户端所对应的服务端。
数据库:数据库就是用户通过 mysql 向服务端发送请求,然后,服务端在硬盘 / 内存中产生用于存储数据的特殊结构的文件。——简单来说,数据库就是硬盘 / 内存中一种用于存储数据的特殊结构的文件(一种二进制文件)。
eg:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| helloworld |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
借助这个例子我们就可以知道数据库其实就是一个文件夹(DB)。
Extra:
为什么要用数据库,而不直接使用文件呢?文件夹不是已经可以用来存储数据吗?
我们可以假设一种场景:有一个文件里面存储着十亿个 ip 地址,而我们上司要求我们在这十亿个 ip 地址中找到所有 120 开头的 ip 地址,这时候我们程序员还需要进行二次编码,然后才能够完成这个任务;而假如我们使用的是数据库来存储数据的,那么这时候我们只需要向客户端发送请求,然后客户端会直接向服务端发送相对应的请求,服务端再对这个请求进行相对应的处理,然后就能完成任务,这样就可以提高程序员的工作效率了。
2、数据库的登录基本选项
-h:后面跟上指定的 ip 地址就能够登上相对应主机的数据库了。
-P:后面跟上指定的 port 端口号就能够登上对应端口号上的数据库了。
-u:后面跟上指定的用户名就能够登上该数据库下的对应用户账号了。
-p:后面跟上对应的密码就能直接登上数据库的对应用户帐号了。——这也是可以将账号对应密码进行回显登录的方法。
注:在登录数据库的时候和登录 Linux 的用户账号时一样,正常密码是不会回显的。
3、服务器,数据库,表的关系
下面,我使用一张图来直接展示这几个之间的关系。
eg:
我们平常使用浏览器的时候会产生对应的数据,例如:浏览记录,收藏,标签页。此时,在该浏览器对对应的数据库中就是产生了对应的表,比如表一存储浏览记录,表二存储收藏,表三存储标签页。
所以数据库本质是对应的文件夹以及相应的子文件。
4、使用案例
创建数据库:
mysql> create database helloworld;
Query OK, 1 row affected (0.01 sec)
展示所有的数据库:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| helloworld |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
使用数据库:
mysql> use helloworld;
Database changed
创建表格:
mysql> create table students(
-> name varchar(32),
-> age int,
-> gender varchar(2)
-> );
Query OK, 0 rows affected (0.06 sec)
对表格插入数据:
mysql> insert into students(name, age, gender) values ("张三", 20, "男");
Query OK, 1 row affected (0.01 sec)
mysql> insert into students(name, age, gender) values ("李四", 20, "男");
Query OK, 1 row affected (0.01 sec)
mysql> insert into students(name, age, gender) values ("王五", 20, "男");
Query OK, 1 row affected (0.01 sec)
mysql> insert into students(name, age, gender) values ("赵六", 20, "男");
Query OK, 1 row affected (0.02 sec)
展示表格中的数据:
mysql> select * from students;
+--------+------+--------+
| name | age | gender |
+--------+------+--------+
| 张三 | 20 | 男 |
| 李四 | 20 | 男 |
| 王五 | 20 | 男 |
| 赵六 | 20 | 男 |
+--------+------+--------+
4 rows in set (0.00 sec)
在这里,有点像链表中的物理结构和逻辑结构的感觉,而这里所展示出来的就是逻辑结构。
5、MySQL架构
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、
Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体
系结构的一致性。
下面我将借助这张图对 MySQL 的架构进行简单的讲解。
首先,第一层就是服务器进行连接和安全性检验。
然后,第二层就是类似于编译器对命令进行语法和词法分析。
最后,第三层就是选择对应的存储引擎。
这三层就相当于计算机体系结构中的用户层 / 网络协议中的应用层。
查看 MySQL 对应的存储引擎的指令:
show engines;
第三层下面的就是对应的 硬盘 / 内存 存储。
这一层就相当于计算机体系结构中的 OS 层。
6、SQL 的种类(了解一下即可)
- DDL【data definition language】 数据定义语言,用来维护存储数据的结构
代表指令: create, drop, alter
- DML【data manipulation language】 数据操纵语言,用来对数据进行操作
代表指令: insert,delete,update
-
DML中又单独分了一个DQL,数据查询语言,代表指令: select
-
DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务
代表指令: grant,revoke,commit
7、存储引擎对比
存储引擎我就聊两个:MyISAM,InnoDB。
MyISAM 的并发程度比较高,适合存储大型文件。
而 InnoDB 的使用场景很多,80%的场景可以使用 InnoDB 存储文件。