数据库和存储引擎

这篇笔记我们介绍MySQL中有关数据库服务器管理和存储引擎的基本概念和操作。

基本概念

学习如何管理数据库之前,我们必须先了解几个基本概念。

数据库管理系统:即DBMS,MySQL软件属于关系型数据库管理系统(RDBMS)

数据库服务器:指MySQL的mysql-server部分,它以服务器的形式运行在服务器操作系统上(MySQL通常使用TCP的3306端口),其他程序可以通过各种客户端访问mysql-server

数据库服务器的客户端:指mysql-client,phpmyadmin,navicat等诸多能够访问、管理MySQL的客户端软件程序

数据库:一个应用可以创建一个数据库(database)。这是一个抽象的概念,如果我们的服务器电脑上跑了学生管理系统、办公自动化系统两个应用程序,那么这两个应用程序分别对应DBMS中的2个数据库

数据表:一个数据库有多个数据表(table),这个就不需要多介绍了,这个概念是关系数据库理论的基础

MySQL基本数据库管理命令

下面我们使用命令行工具完成MySQL数据库的一些基本管理操作。

查看已有的数据库

show databases;

创建一个数据库

create database netstore;

这条命令就创建了一个最基本数据库,我们可以在里面创建数据表,我们的应用可以连接上去进行SQL语句操作。

在MySQL命令行中,我们可以使用use <dbname>命令选择一个数据库。

删除一个数据库

drop database netstore;

该命令会删除一个数据库中的一切数据,使用时请务必小心,以免引起不必要的麻烦,服务器上删除数据库是很罕见的操作。不过在开发环境中,我们调试程序时,有时为了方便,会直接删除一个数据库再重建。

存储引擎

MySQL提供了多了存储引擎,不同数据表可以使用不同引擎,各种不同实现有其自身的优势的缺点,我们应该取长补短,合理使用。这里我们介绍几种常用的存储引擎,有关存储引擎底层的知识,请参考数据库基础理论相关章节。

查看可用的存储引擎:

show engines;

上图是MySQL8的返回结果。

InnoDB

InnoDB是默认的存储引擎,它的功能和性能都很强,是使用最多的存储引擎。InnoDB具有以下特性:

  1. 支持事务安全表(ACID),行锁定和外键。MySQL中,InnoDB表可以和使用其他存储引擎的表联合查询(但是外键约束无论如何不能跨引擎使用)。
  2. InnoDB将所有的表和索引维持在一个逻辑表空间中,表空间可能包含数个文件。InnoDB表可以是任意尺寸的,即使在文件尺寸被限制在2GB的操作系统上。
  3. InnoDB不创建目录,而是在MySQL数据目录下创建一个名为ibdata1的自动扩展数据文件,该文件存储在/var/lib/mysql/ibdata下。

MyISAM

MyISAM在Web、数据仓库等应用场景下使用,这个引擎有较高的插入和查询速度,但不支持事务。

MEMORY

MEMORY引擎将表中的数据存储到内存中,通常用于临时存储数据,为查询和引用其他表数据提供快速访问。MEMORY不支持BLOB和TEXT,但有强大的索引功能。有关MEMORY引擎具体请参考MySQL相关的文档,这里就不多做介绍了。

注意:使用MEMORY表时,如果MySQL服务重启,里面的数据就全部丢失了。

存储引擎的选择

更换一个数据表的存储引擎:

alter table <表名> engine=<更改后的存储引擎名>;
  • MyISAM 数据表主要用来插入和查询记录,使用MyISAM性能较好
  • MEMORY 临时存放数据且数据量不大,并且不需要较高的数据安全性,使用MEMORY性能较好
  • InnoDB 如果你还在纠结用什么存储引擎比较好,现在不需要考虑了,我们还是用默认的InnoDB吧

总而言之,MyISAM适合作数据仓库,单线程插入和查询速度比InnoDB快数倍;Memory最快但有容量限制,只能存储很少的数据,可以作为临时性的缓存表或数据仓库计算步骤的中间表,较少使用;InnoDB适合有一定并发量的普通业务数据库等大多数情况。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap