数据库是按照数据结构来组织、存储和管理数据的仓库,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
在计算机中存储数据不是有文件吗?为什么还要数据库呢?
文件存储数据有以下缺点:
为了解决上述问题,计算机科学家们就创造了数据库。
我们先来见一见服务端mysqld:
服务端是一直在我们的云服务器上运行的,等待客户端发送需求。
客户端就是我们正常使用的mysql,我们通过客户端向服务端发送需求,服务端通过某些算法访问"数据库文件"来解决需求拿到结果,最后将结果发送给客户端让客户拿到,逻辑图如下:
MySQL服务器其实是一个网络服务器,通过如下指令查一下:
netstat -ltp
数据库的存储介质:
下面列举了几个主流的数据库:
mysql -h 127.0.0.1 -P 3306 -u root -p
此外,如果要连接的是本地的MySQL服务器,那么连接时只需要指明用户名和用户密码即可。如下:
mysql -uroot -p
连接到MySQL服务器后,就可以输入各种SQL语句让服务器执行了,当要退出mysql时直接输入quit
或exit
或\q
即可。如下:
数据库服务器,数据库,表关系:
说明一下:
通过MySQL创建的数据库和各种表结构,最终会以文件的形式存储下来,通过查看MySQL的配置文件中的datadir可以得知数据文件的存储路径。
比如我的MySQL配置文件的绝对路径为/etc/mysql/mysql.cnf.d/mysqld.cnf
,配置文件中datadir对应的值为/var/lib/mysql
。如下:
将来MySQL创建的数据库文件都会存储在该目录下,可以看到该目录下有很多MySQL相关的数据文件。如下:
连接MySQL服务器后,通过create语句创建一个名为hellomysql的数据库。比如:
create database hellomysql;
记得最后加分号,忘了就在下一行加,然后回车。
这时/var/lib/mysql
目录下,就会多出一个名为hellomysql的目录。如下:
因此我们创建数据库时,本质就是在MySQL的数据存储路径下新建了一个目录,而当我们将这个数据库删除后,这个目录其实也就不存在了。
使用数据库之前,可以先通过show语句查看当前都有哪些数据库,然后再通过use语句使用指定的数据库。比如:
然后输入如下指令:
use hellomysql;
使用数据库可以理解成,就是使用cd命令进入到该数据库对应的目录当中。
这里我们通过create语句创建一个简单的student表。比如:
通过show语句可以查看创建的student表结构。比如:
由于student表采用的存储引擎是InnoDB,因此在MySQL的数据存储路径下的helloworld目录下,就会多出一个文件student.ibd。如下:
通过desc语句可以查看对应的表结构。比如:
通过insert语句可以向表中插入数据。比如:
通过select语句可以查看表中的数据。比如:
表中的数据是以二维表格的形式进行呈现的,包括行和列。如下:
其中每一行我们称之为是一条记录,而每一列都代表一个属性(属性列)。
MySQL是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如Unix/Linux、Windows、Mac和Solaris。各种系统在底层实现方面各有不同,但是MySQL基本上能保证在各个平台上的物理体系结构的一致性。
MySQL的架构设计如下:
MySQL架构主要可分为如下四层:
MySQL服务器会收到MySQL客户端发来的SQL语句,并根据SQL语句执行对应的操作。
SQL(Structured Query Language,结构化查询语言)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
SQL语句可分为如下三类:
存储引擎就是数据库管理系统如何存储数据、如何为存储的数据建立索引、如何更新数据、如何查询数据等技术的实现方法,MySQL中的存储引擎是插件式的存储引擎,它可以支持多种存储引擎。
通过show语句可以查看MySQL支持的存储引擎。比如:
其中MySQL底层默认使用的存储引擎是InnoDB,该存储引擎支持事务、行级锁、外键等。