这篇笔记我们介绍MySQL中有关数据库服务器管理和存储引擎的基本概念和操作。
学习如何管理数据库之前,我们必须先了解几个基本概念。
数据库管理系统:即DBMS,MySQL软件属于关系型数据库管理系统(RDBMS)
数据库服务器:指MySQL的mysql-server部分,它以服务器的形式运行在服务器操作系统上(MySQL通常使用TCP的3306端口),其他程序可以通过各种客户端访问mysql-server
数据库服务器的客户端:指mysql-client,phpmyadmin,navicat等诸多能够访问、管理MySQL的客户端软件程序
数据库:一个应用可以创建一个数据库(database)。这是一个抽象的概念,如果我们的服务器电脑上跑了学生管理系统、办公自动化系统两个应用程序,那么这两个应用程序分别对应DBMS中的2个数据库
数据表:一个数据库有多个数据表(table),这个就不需要多介绍了,这个概念是关系数据库理论的基础
下面我们使用命令行工具完成MySQL数据库的一些基本管理操作。
show databases;
create database netstore;
这条命令就创建了一个最基本数据库,我们可以在里面创建数据表,我们的应用可以连接上去进行SQL语句操作。
在MySQL命令行中,我们可以使用use <dbname>
命令选择一个数据库。
drop database netstore;
该命令会删除一个数据库中的一切数据,使用时请务必小心,以免引起不必要的麻烦,服务器上删除数据库是很罕见的操作。不过在开发环境中,我们调试程序时,有时为了方便,会直接删除一个数据库再重建。
MySQL提供了多了存储引擎,不同数据表可以使用不同引擎,各种不同实现有其自身的优势的缺点,我们应该取长补短,合理使用。这里我们介绍几种常用的存储引擎,有关存储引擎底层的知识,请参考数据库基础理论相关章节。
查看可用的存储引擎:
show engines;
上图是MySQL8的返回结果。
InnoDB是默认的存储引擎,它的功能和性能都很强,是使用最多的存储引擎。InnoDB具有以下特性:
/var/lib/mysql/ibdata
下。MyISAM在Web、数据仓库等应用场景下使用,这个引擎有较高的插入和查询速度,但不支持事务。
MEMORY引擎将表中的数据存储到内存中,通常用于临时存储数据,为查询和引用其他表数据提供快速访问。MEMORY不支持BLOB和TEXT,但有强大的索引功能。有关MEMORY引擎具体请参考MySQL相关的文档,这里就不多做介绍了。
注意:使用MEMORY表时,如果MySQL服务重启,里面的数据就全部丢失了。
更换一个数据表的存储引擎:
alter table <表名> engine=<更改后的存储引擎名>;
总而言之,MyISAM适合作数据仓库,单线程插入和查询速度比InnoDB快数倍;Memory最快但有容量限制,只能存储很少的数据,可以作为临时性的缓存表或数据仓库计算步骤的中间表,较少使用;InnoDB适合有一定并发量的普通业务数据库等大多数情况。