数据库原理:SQL的基本概念和MySQL简介
SOL是关系数据库的标准语言,也是目前应用最广的关系数据库语言。其功能除数据查询外,还包括数据定义、数据操纵和数据控制。MySQL是一款安全、跨平台、高效的数据库系统,能够与 PHP、Java 等主流编程语言紧密结合,目前已经成为最为流行的开源关系数据库系统。本章主要介绍SQL的基本概念和目前常用的数据库管理系统软件MySQL。
本章学习目标:了解SQL和MySQL的发展情况;理解SQL的分类;能够安装MySQL 并能使用常见的MySQL管理工具。
一、SQL的基本概念
1.1、SQL的发展及标准化
1.1.1、SQL的发展
SQL功能强大,简洁易用,是当前最成功、应用最广的关系数据库语言。1974年,钱伯林(Chamberlin)和博伊斯(Boyce)提出了SEQUEL (Structured English Query Language,结构化英语查询语言)。IBM公司于1976年对SEQUEL进行了修改,将其用于System R关系数据库系统中,并在1980年将其改名为SQL。1979年,Oracle推出了商业版SQL。IBM于1981年推出了商用关系数据库SQL/DS,实现了SQL。直至今天,SQL广泛应用于各种大、中、小型数据库,如Sybase、 SOL Server、 Oracle、MySQL、Access、SQLite等。
1.1.2、SQL的标准化
随着关系数据库系统和SQL应用的日益广泛,1982年,美国国家标准学会(ANSI)开始制订SQL标准。1986年,ANSI公布了SQL的第一个标准SQL-86。国际标准化组织(International Organization for Standardization, ISO)于1987年正式采纳了SQL-86标准为国际标准,并在1989年对SQL-86标准进行了补充,推出了SQL-89标准。随后,ISO在1992年推出了SQL-92标准;在1999年推出了SQL-99标准,增加了对对象数据、递归和触发器等的支持功能。在2003年、2008年、2011年和2016年,ISO分别推出了SQL: 2003、sQL: 2008、SQL: 2011和SQL: 2016。
1.2、SQL的主要特点
SOL语法简单,命令少,简洁易用,因此成为标准并被业界和用户接受。sQL主要具有以下特点。
(1) SQL是一种一体化的语言。SQL包括数据定义、数据查询、数据操纵和数据控制等方面的功能,可以完成数据库活动中的全部工作。
(2) SQL是一种非过程化的语言。用SQL进行数据操作,只需要提出“做什么”,而不需要知道“怎么做”,因此,用户不需要关心具体的操作过程,也不必了解数据的存取路径,即用户只需要描述清楚“做什么”, sOL就可将要求交给系统,全部工作由系统自动完成。
(3) SQL是一种面向集合的语言。sOL采用集合操作方式,每个命令的操作对象可以是元组的集合,结果也可以是元组的集合。
(4) SOL既是自含式语言,又是嵌入式语言。SQL作为自含式语言,可以独立使用交互命令,适用于终端用户、应用程序员和DBA;作为嵌人式语言,可嵌入高级语言中使用,供应用程序员开发应用程序。
1.3、SQL的分类
SQL按照实现的功能不同,主要分为4类:数据定义语言、数据查询语言、数据操纵语言和数据控制语言。其中每类语言对应的动词如表3-1所示。下面分别介绍SQL的4类语言。
SQL的4类语言 | 动词 |
---|---|
数据定义语言 | CREATE、ALTER、DROP |
数据查询语言 | SELECT |
数据操纵语言 | INSERT、UPDATE、DELETE |
数据控制语言 | GRANT、REVOKE |
1.3.1、数据定义语言
数据定义语言(DDL)是一组SQL命令,主要用于创建和定义数据库对象,并将定义保存在数据字典中。数据定义语言主要包括CREATE、ALTER和DROP 3个语句,可用于创建数据库对象、修改数据库对象和删除数据库对象等。其中,CREATE负责数据库对象的建立,如数据库、数据表、据库索引、视图等对象都可以使用CREATE语句来建立;ALTER负责数据库对象的修改,用户可依照要修改的程度来决定使用的参数;DROP用于删除数据库对象,用户只需要指定要删除的数据库对象名称即可。
1.3.2、数据查询语言
数据查询语言(Data Query Language, DQL)主要用于对数据库中的各种数据对象进行查询,主要包括SELECT语句,是数据库学习的重点。其基本结构是由SELECT子句、FROM子句和WHERE子句组成的查询块,如下所示。
1 |
|
即根据查询条件,从表或视图中提取需要的字段。数据查询语言的详细语法结构和使用方法参见第6章。
1.3.3、数据操纵语言
数据操纵语言(DML)主要用于处理数据库中的数据。数据操纵语言包括INSERT、UPDATE和DELETE 3个语句,供用户对数据库中的数据进行插人、更新和删除等操作。其中,INSERT 是向数据表中插入数据,可以一次插入一条数据,也可以将SELECT查询子句的结果集批量插入指定数据表;UPDATE是依据给定条件,将数据表中符合条件的数据更新为新值;DELETE用于从数据库对象中删除数据。除INSERT外,其他指令可以通过WHERE子句来指定数据范围,若不加WHERE子句,则访问全部数据。具体语法结构可参考5.3节。
1.3.4、数据控制语言
数据控制语言(Data Control Language, DCL)可以对数据访问权限进行控制,用于修改数据库结构的操作权限,由GRANT和REVOKE两个语句组成。用户可通过授权和取消授权语句来实现相关数居自字文制 以保证数据库的安全性。具体语法结构详见第8章。
二、MySQL简介
2.1、MySQL的发展和版本
MySQL目前已历经多个版本的发展和演化。1996年,MySQL 1.0发布,其前身是1979年蒙0蒂(Monty)用BASIC设计的一个报表工具。1999年,MySQL AB公司成立。同年,MySQL AB 公司发布MySQL 3.23,该版本集成了Berkeley DB存储引擎,为后续可插拔式存储引擎架构奠定了基础。2000年,MySQL基于GPL协议开放源码。2003年,MySQL AB公司发布了MySQL 4.0,其集成了InnoDB存储引擎,提供了查询缓存。2005年发布的MySQL 5.0提供了视图、存储过程等功能。2008年,Sun公司收购MySQL AB公司,MySQL数据库进入Sun时代。同年,Sun公司发布MySQL 5.1,其提供了分区、事件管理、基于行的复制等功能。2009年,Oracle收购Sun公司,MySQL数据库进入Oracle时代。2010年发布的MySQL 5.5,其最主要的特点是InnoDB存储引擎成为MySQL的默认存储引擎。2013年和2015年分别发布了MySQL 5.6和MySQL 5.7。2016年,MySQL开始了8.0版本。
MySQL主要包括以下几个常见版本。
(1)社区版本(MySQL Community Server) :开源免费,但不提供官方技术支持,是数据库学习者常用的MySQL版本。
(2)企业版本(MySQL Enterprise Edition) :需付费,包含MySOL企业级数据库软件、监控与咨询服务,同时提供可靠性、安全性和实时性的技术支持。
(3)集群版(MySOL Cluster) :开源免费,是由多台服务器组成、同时对外提供数据管理服务的分布式集群系统,可将几个MySQL Server封装成一个Server,能够实现负载均衡,并提供冗余机制,可用性强。
(4)高级集群版(MySQL Cluster CGE) :需付费,包括用于管理、审计和监视MysQL Cluster数据库的工具,并提供Oracle标准支持服务。
除上述官方版本,MySQL还有一些分支。其中,MariaDB,其目的是完全兼容MySQL,其使用基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎;Percona Server也是MySQL重要的分支之一,可以与MySQL完全兼容,为更好地发挥服务器硬件的性能,其在InnoDB存储引擎的基础上,提升了性能和易管理性,最后形成了XtraDB引擎。
2.2、MySQL的主要组件
MySQL分为Server层和存储引擎两部分。其中,Server层包括连接器、查询缓存、分析器、优化器、执行器。Server层都是通用的组件,所有跨存储引擎的功能都在Server层实现,如存储过程、触发器、视图等。存储引擎主要负责数据的存储和提取。下面介绍Server层中的组件,存储引擎介绍详见4.1节。
2.2.1、连接器
连接器主要用于与客户端建立连接、获取权限、维持和管理连接。连接器首先进行身份验证,验证通过之后即可建立连接,同时,在建立连接时验证权限。若要修改权限,则要重新建皆立新的数据连接。当连接长时间未操作时(超过连接空闲时间),连接器会自动断开连接。
2.2.2、查询缓存
MySQL在执行某个查询语句时,会先到缓存中查看是否执行过该语句,如果之前执行过这个查询语句,则直接返回结果集,从而达到快速查询效果。注意:MySQL8.0删除了查询缓存的功能。
2.2.3、分析器
分析器主要用于分析SQL语法是否正确,通过词法分析,明确用户输入的SQL语句代表什么、要做什么:之后通过语法分析,判断用户输入的SQL语句是否满足MySOL语法规则。
2.2.4、优化器
SQL执行前会使用优化器进行优化,选择出最优的查询方案。比如表中有多个索引时,决定用哪个索引;如果是多表关联查询,则决定表的连接顺序。
2.2.5、执行器
执行器主要用于对SQL进行权限校验,判断SOL在对应表中是否有执行权限,如果有权限,则根据表的存储引擎定义调用存储整提供的接口,对数据进行操作;如果无权限则报错。
2.3、MySQL的下载和安装
2.4、MySQL管理工具
MySQL的管理工具有很多,可以分为应用工具、运维管理类工具、监控管理类工具和诊断优化工具。
2.4.1、应用工具
应用工具MySQL客户端工具有很多,如需要付费的SQLyog、Navicat,免费的MySQL Workbench、sQLDeveloper hpM.dm、 MySQL Shell等。本书主要以MySQL Workbench作为可视化操作的工具。下面介绍MySQL Workbench和MySQL Shell。
2.4.2、运维管理类工具
工具运维管理类工具主要是数据库管理员使用的工具。Percona-toolkit是主流的MySQL运维工具,是一组高级命令行工具的集合,具有查看当前服务的摘要信息、磁盘检测、实现表同步等功能。针对数据备份和恢复,用户可以使用mysqldump、mysqlpump、mydumper和xtrabackup。其中,mysqldump是MySQL经典的逻辑备份工具,也是默认的工具。针对数据库审计,用户可以使用MySQL官方的商业版插件、Percona Audit Log插件或MariaDB插件。
2.4.3、监控管理类工具
为应对因服务或其素导致的性能变化,用户可以使用Zabbix、Lepus、mysql-statsd等性能监控工具。其中,abbix基于Web界面,既可以监控又能报警,通过监控各种网络参数,保证服务器系统的全运营,并能时报警以快速解决问题。
2.4.4、诊断优化工具
诊断工具主要有innotop、orzdba、mytop、orztop和systemtap等。innotop可以通过命令行调用展示MySQL服务器的运行状况。淘宝DBA团队开发的orzdba可以监控MySQL数据库,同时可以进行磁盘和CPU的一些监控。mytop可以监控当前的连接用户和正在执行的命令。orztop可以查看MySQL数据库实时运行的SQL状况。systemtap可以监控、跟踪运行中的程序。
在性能测试方面,用户可以使用sysbench、tpcc-mysql、mydbtest和mysqlslap等工具。其中,mysqlslap是MySQL自带的基准测试工具。