序言
在接触到新知识时,相信各位都会有一种陌生以及想逃避的感觉,但是一旦克服了这种万事开头难的感觉,之后就犹如拨开云雾见天明,并且随着一步一个脚印地走下去,时间久了再回过头来看相信各位一定都会发出轻舟已过万重山的感叹,对于学习MySQL数据库服务也是如此,我不禁想问一句,你准备好迎接MySQL的旅程了吗?如果准备好了,那么接下来就开始今天初始数据库的学习吧!
一、常见概念
什么是数据库?
数据库,字面上理解就是存放数据的仓库,更准确的说是一个存放标准化数据的智能仓库,标准化的目的就是为了让仓库更加地智能,即方便仓库批量化,规模化地管理数据,管理特指对批量数据进行增删改查操作,此外因为仓库要存储的数据是海量的,所以容量很大,所以一般仓库都建在计算机的硬盘当中。
总而言之,数据库通常是建立在硬盘当中的一个存放标准化数据,以方便进行增删改查操作的智能仓库。 再看学术角度数据库的概念,即长期储存在计算机内、有组织的、可共享的大量数据的集合。是不是就不那么难理解了呢?
拓展:
- 数据库根据存储介质——内存和磁盘,可以分为两类,内存数据库和磁盘数据库。
- 内存数据库,可以提供更快的数据存储和提取速度,适用于对实时性和并发度要求高的场景,但是由于一般内存断电其上存放数据都会消失,因此无法保证数据持久化存储,而且内存通常都较小,无法存储海量的数据。
- 磁盘数据库,可以存储海量的数据且保证数据持久化存储,但是由于硬件的限制,访问数据的效率会比较低。
- 总的来说,最好将两者结合起来平衡进行使用,将经常访问的热数据加载到内存提高访问效率,而不经常访问的数据应存储在磁盘,提高数据的持久化和提高数据存储的容量。
为啥要有数据库?
先从历史的角度进行分析,数据库是由文件进化而来,因为文件也能存储数据,即程序员使用对应的文件接口,比如read,write等读取与写入批量化的数据,但是一旦涉及到"海量"的数据,程序员头估计都炸了,头发熬没估计都处理不完,发展到这个阶段,于是就会有人提出干脆写一款专门的软件,解决这个问题,于是数据库应运而生。
除此之外,文件之所以被数据库替代还有类似地,遍历查找数据效率低;管理数据不方便;不安全,比如没有备份,一旦覆盖了就找不回了;控制不方便,写入的数据不标准,比如格式有问题,一小心写错了之类的等问题,而数据库则可解决以上文件致命的缺点,因此数据库代替文件是历史发展的必然。
什么是数据库服务?
所谓数据库服务,即给用户开一个智能仓库,把数据放进来,方便之后进行管理。所谓服务,一方面指的是面向的对象是客户或者用户,一方面指的是应用软件的功能。除此之外,因为数据库可是存在硬件当中的,而操作系统是硬件的老大,因此要使用硬件必须要经由操作系统,也就意味着上层必须通过系统调用接口,设计出一款对应的数据库应用软件,从而才能让用户使用数据库的相关功能。
常见的服务类型:
- 安装和配置软件,配置相应的参数,满足特定需求。
- 备份和修复数据,防止数据丢失,以及必要时恢复历史数据。
- 性能优化,提升访问的速度以及提高数据库的性能。
- 安全管理,设置权限,避免非法用户连接和篡改数据。
- 监控和维护,保障数据库的稳定可靠。
拓展:
- 数据库智能的主要原因是采用了合适的数据结构对数据进行管理,最常使用的是B+树。
- 如果对B树系列有兴趣可见博客——https://blog.csdn.net/Shun_Hua/article/details/138505124。
数据库管理系统有哪些?
-
喜闻乐见的MySQL,世界上最受欢迎的数据库,开源免费,并发度好,适用于简单业务的处理,主要应用于电商,社交网络,论坛等领域,软件属于甲骨文——全球领先的数据库软件供应商。
-
对口银行的Oracle,付费,适合大型项目,复杂的逻辑,也是甲骨文的软件,不过并发度相比较MySQL略差,主要应用于企业,大型应用,银行等对数据比较敏感的场景中。
-
学校开发的PostgreSQL,由加州大学伯克利分校计算机开发,免费开源,以可靠性、稳定性和拓展性高闻名,主要应用于大型应用和数据密集型应用等领域当中。
-
轻量小型的SQLite,轻型的数据库,是一个小型的C库,可直接与应用程序相连,主要应用于嵌入式设备,小型的Web程序等场景中。
-
微软独家的SQL Sever,微软开发,.Net程序员的最爱,主要应用于网站、管理系统等中大型规模的项目当中。
-
Java实现的H2,嵌入式的轻量级数据库,本身是一个类库,主要应于开发和测试以及小型应用的数据存储。
拓展:
- 关系型数据管理系统(Relational Database Management System),简称RDBMS,简单理解就是使用类似Excel的二维表格的形式对数据进行组织和管理,上述提及的管理系统都属于此类。
- 非关系型数据管理系统(Not Only SQL),简称NOSQL,即不局限于关系数据库组织数据的形式,而是采用更加宽泛和灵活的方式组织数据,常见的有MongoDB,Redis等,感兴趣的读者可自行拓展了解。
到这里想必对数据库有了一个大致的认识,那么在下文将挑选出最受欢迎的MySQL带领大家认识和使用数据库的相关概念和基本操作。
二、初始MySQL
1.框架
先给出图解,下面进行文字分析。
- 首先MySQL分为服务端和客户端,服务端是在服务器上 7 ∗ 24 7*24 7∗24不停的运转给客户提供服务,客户端使用的不同软件接入数据库连接到服务端使用其提供的数据存储服务。
- 然后服务端提供数据存储,数据备份,保障数据安全,避免非法用户连接和篡改数据,以及服务性能稳定等功能。
- 除此之外服务端要给大量的用户提供服务,因此提供了连接池,处理连接,提高IO的并发度,同时可以实现认证保障安全。
- 而且服务端有程序员也要对数据进行处理,要使用相应的接口来完成,经由语法分析器,优化器和缓存器处理之后,交给下层完成具体的任务。
- 接着根据不同的业务场景,管理数据的方式可能互不相同,因此要选择合适的存储引擎,一般来说常用的是MyISAM和InnoDB。
- 最终由底层的文件系统完成对数据文件的更新,删除,查找等操作,并持久化的存储数据文件。
补充:上述的SQL接口,也就是SQL语句,是一种程序员与数据库交互的语言,大体上可以分为三类。
- DDL,数据定义语言,用于维护管理和创建表结构,常见的有create,drop,alter。
- DML,数据操纵语言,用于对表内容的增删查改,常见的有update,insert,delete。
- DCL,数据控制语言,用于对权限和事务的管理,常见的有commit,grant,revoke。
- 巧记,前面的D和后面的L都意为Data和Language,只需记中间的D(define),M(manipulation),C(control)即可。
总的来说,MySQL是一套服务端与客户端交互的软件,多拓展一点,软件是处于用户层的,因此是无法直接操作硬件的,只能通过操作系统暴露给上层的系统调用接口来进行完成相应的功能,从而实现数据库的功能。
说明:
- 学习和下载MySQL需要自备一个小型服务器,不过可以上网白嫖,当然也可以付费,大概一年一百多,此处下载这里就不在赘述了,根据服务器版本搜索相应的教程即可,下面我们直接进入正题——如何使用MySQL。
- MySQL本质是一种基于CS模式下的网络服务,MySQL客户端的应用程序为
mysql
,服务端的应用程序为mysqld
。
2.校验与配置
- 查看服务端与客户端
which mysql;which mysqld;
- 拓展:mysqld是服务端,mysql是客户端,且客户端连接到服务端一般是在内网中进行的,因为暴露在公网当中是十分危险,容易被黑客攻击,如果被攻击了,就可能导致重要的数据泄漏,甚至数据被篡改。
- 查看MySQL进程
ps axj | head -1;ps axj | grep mysql | grep -v grep;
- 查看连接状态
netstat -naltp | grep mysqld;
- 说明:MySQL采用的是TCP连接保证可靠性,端口号3306支持的是默认传统版本的MySQL连接,在MySQL8.0之后引入X协议,设置33060为其默认端口,两个端口分别应用于不同的场景支持不同的服务。
- 查看启动状态
systemctl status mysql
- 停止服务
systemctl stop mysqld
- 启动服务
systemctl start mysqld
- 配置信息
博主是在unbuntu22.04下的,所以要在/etc/mysql/mysql.conf.d/
下的mysqld.cnf
下进行配置,Centos版本可找到my.cnf
文件,一般在/etc/mysql/
下进行配置。
[mysql]
#设置默认端口号
port=8080
#设置字符集
character-set-server=utf8
#设置存储引擎
default-storage-engine=innodb
#设置数据存储路径
datadir=/var/lib/mysql
将上述配置信息cv到配置文件下,然后重启mysql服务使之生效即可,还有其他的配置信息可见下面的官方文档查看。
systemctl restart mysql
说明:更多的配置信息请见官方文档——https://dev.mysql.com/doc/refman/8.3/en/system-variable-privileges.html
通过如上命令,可以帮助检查MySQL是否装好以及帮助启动和关闭MySQL服务,以及进行配置,总之准备工作完成之后,接下来便可连接到MySQL服务端进行使用了。
3.基础命令
- 连接到mysqld
mysql -h localhost -P 3306 -u root -p
- -h,指的是所连的主机的地址,一般指的是localhost或者是127.0.0.1。
- -P,指的是端口号,默认的是3306,可以根据配置文件自行设置,一般改为其它的更为安全。
- -u,指的是用户,这里采用的是超级用户的方式进行登录。
- -p,指的是密码,上述命令按下回车之后,会提示输入密码。
说明:第一次root用户登录一般是没有密码的,之间按回车即可。
- 查看存储引擎
show engines;
- 查看数据库
说明:数据库本质上就一个目录,在mysql下存放在/var/lib/mysql
路径下。
- 创建数据库
create database [数据库名称];
说明:创建一个数据库本质上就是创建一个目录。
- 使用数据库
use [数据库]
- 创建表
create table [表结构]
#说明:后面如何创建表结构会细讲的,此处只起到"看一看的效果"。
说明:实际上数据库中创建一张表其实就是,在目录下创建一个文件。
- 查看所有表
show tables;
- 查看指定表结构
desc [表名]
- 插入数据
insert into [表名] valuse('列值','列值'),...,...;
#说明:此处是进行全列插入,同理也只起到"看一看的效果"。
- 查看数据
select * from [表名];
#说明:同上。
- 删除表
drop table [表名]
- 删除数据库
drop database [表名]
总结
到这里我们已经完成了对数据库相关概念,流行的数据库管理系统的认识,以及数据库的配置和检验命令,最终使用MySQL的相关命令简单的使用和理解数据库的原理。总而言之,本篇文章的对于数据库初始的任务差不多已经完成了。我是舜华,期待与你的下一次相遇!