一、什么是数据库?
以特定的格式保存好的文件,我们就叫做数据库。
提供较为便捷的数据的存取服务的软件集合、解决方案,我们就叫它数据库。
存储数据用文件就可以了,为什么还要弄个数据库。
文件或数据库都可以存储数据,但是如果用文件,对于其内数据内容的管理工作就需要程序员自己做,如果用数据库,只需要几条语句就可以了。
相比较于数据库,文件的缺点在于
1.文件的安全性
2.文件不利于数据查询和管理
3.文件不利于存储海量数据
4.文件在程序中控制不方便
数据库的存储介质:磁盘和内存
在Linux中,安装包一般是.rpm格式的。
rpm -qa查看系统中之前安装过的安装包
数据库可以更有效的管理数据。
指令:
启动:systemctl start mysqld
MySQL的登录:mysql -uroot -p
连接数据库:mysql -h 127.0.0.1 -p 3306 -u
127.0.0.1为指定主机ip(这里是本地ip,如果支持远端,也可以输入远端ip)
3306是mysql的默认端口号(数据库是建议改端口号的)
-u表示想以哪个用户登录
-p选项后面跟密码
mysql实际上是一套网络服务
mysql是数据库的客户端
mysqld是数据库的服务端
我们目录下的mysql实际上是MySQL的客户端,mysqld是MySQL的服务端,也叫数据库服务,实际是一个应用程序,启动之后变成进程。
如果数据库被卸载,其内的数据仍然会保留下来
数据库的本质:对文件的内容提供基本的内容操作,不需要用户、程序员手动进行数据管理,可直接通过mysql软件来操作文件。mysqld是一个软件层,能够帮助用户进行数据管理。
什么是数据库?
mysql实际上是一个数据库服务,以mysqld的形式呈现,最终在磁盘上会有大量的文件保存数据库内部的数据,我们把服务端和这些数据统称为数据库。
实际mysql的服务端就是一个网络服务器,也就是说它采用TCP协议,mysql处于应用层,就是一个应用层服务。在网络的视角,mysqld它就是一个应用层服务,在系统的视角,它就是一个用户层的一个进程
:::3306和LISTEN是TCP协议,是mysqld应用层
它是一个网络服务,内部一定有自己的协议(我们不学mysql的协议规范等等)
要重启的是服务端
d开头的这个表示未来我们建库或者建表以及数据、数据库,都会放在这个目录
s开头的这个主要是用来进行管道通信的。
最重要的就是datadir。第一节1:12:00-1:16:00改mysql路径
改端口号:第一节1:58:45
二、创建一个数据库
mysql是一个关系型数据库(数据和数据之间、数据的行列之间、表与表之间有较大的联系、关系,数据间耦合度较高)。像Nosql(not only sql)这种,它的数据和字段之间没有关系。
创建一个数据库,本质是在做什么?建表本质在Linux上是做什么?
本质是在系统里创建了一个目录,建表本质是创建文件。
在MySQL中建立一个表本质是在Linux上创建对应的文件。
建表的行为在数据库里对应着两个文件。
数据库命令:
show databases;//显示当前数据库支持的数据库列表
creat database +名称;//创建数据库
在MySQL中,建立一个数据库本质是在Linux下建立了一个目录。这个目录就叫数据库。我们操作的是客户端,也就是说实际上本质是客户端构建一个sql,通过网络或本地进程间通信,交给服务端进程,服务端进程收到sql指令,在它的进程内部,一定有对应的系统调用,帮我们创建目录
use +库名称;//使用该库、进入该库
select database();//可以查一下现在用的是哪个库
system clear//执行系统的清屏命令,因为mysql没有清屏命令
create table user(//建表
name varchar(20),
age int
);
show tables;//查看表
desc user;//查看表的具体结构
insert into 表名 () values ();//插入数据
select * from user;
mysql有自己的缓存,不是每个操作都反映在磁盘上
上图是Linux环境下的。
Mysql本质就是一个命令行的client,未来我们知道的图形化界面的访问数据库的软件,也是client,(mysql的生态中,也会提供第三方库,让语言也能直接访问MySQL,这种也叫client(客户端))(Linux中的mysql是一个客户端,mysqld是一个数据库服务端)
服务器、数据库、表关系
MySQL实际是以二进制形式存数据的,只是呈现出来的不一样,MySQL为我们做了相关转换(呈现出来的是逻辑结构)mysql的逻辑结构是行和列的
第一节最后二十分钟,了解就行
mysql架构
mysql在不同环境下都有编好的,我们可以直接拿来用,现在的它在大部分平台都是可以跑的。所以mysql的底层源码在不同平台的底层源码是不一样的,但是上层的sql语句基本都是一样的。而C/C++这样的语言在不同平台上,底层的源码也是不一样的。
Mysql分为三层,第一层叫链接层,主要作链接管理、安全管理、鉴权(例如检测密码是否正确等等)。第二层主要作词法语法分析、系统调优、编译处理等等。第三层是存储引擎层,且支持插件。每一个存储引擎其实都是一个类。
sshd:远程登录协议,如果这个不启动,我们就无法在windows用xshell登录mysql