第 1 章 ? 初识MySQL ? MySQL是一个开放源代码的数据库管理系统(DBMS),它是由MySQL AB公司开发、发布并支持的。MySQL是一个跨平台的开源关系型数据库管理系统,广泛地应用在Internet上的中小型网站开发中。本章主要介绍数据库的基础知识,通过本章的学习,读者可以了解数据库的基本概念、数据库的构成和MySQL的基本知识。 ? 了解什么是数据库 ? 掌握什么是表、数据类型和主键 ? 熟悉数据库的技术构成 ? 熟悉什么是MySQL ? 掌握常见的MySQL工具 ? 了解如何学习MySQL 1.1 数据库基础 数据库由一批数据构成有序的集合,这些数据被存放在结构化的数据表里。数据表之间相互关联,反映了客观事物间的本质联系。数据库系统提供对数据的安全控制和完整性控制。本节将介绍数据库中的一些基本概念,包括:数据库的定义、数据表的定义和数据类型等。 1.1.1 什么是数据库 数据库的概念诞生于60年前,随着信息技术和市场的快速发展,数据库技术层出不穷,随着应用的拓展和深入,数据库的数量和规模越来越大,其诞生和发展给计算机信息管理带来了一场巨大的革命。 数据库的发展大致划分为如下几个阶段:人工管理阶段、文件系统阶段、数据库系统阶段、高级数据库阶段。其种类大概有3种:层次式数据库、网络式数据库和关系式数据库。不同种类的数据库按不同的数据结构来联系和组织。 对于数据库的概念,没有一个完全固定的定义,随着数据库历史的发展,定义的内容也有很大的差异,其中一种比较普遍的观点认为,数据库(DataBase,DB)是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。它是一个按数据结构来存储和管理数据的计算机软件系统,即数据库包含两层含义:保管数据的“仓库”,以及数据管理的方法和技术。 数据库的特点包括:实现数据共享,减少数据冗余;采用特定的数据类型;具有较高的数据独立性;具有统一的数据控制功能。 1.1.2 表 在关系数据库中,数据库表是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构。它由纵向的列和横向的行组成,行被称为记录,是组织数据的单位;列被称为字段,每一列表示记录的一个属性,都有相应的描述信息,如数据类型、数据宽度等。 例如一个有关作者信息的名为authors的表中,每个列包含所有作者的某个特定类型的信息,比如“姓名”,而每行则包含了某个特定作者的所有信息:编号、姓名、性别、专业,如图1.1所示。 编号 姓名 性别 专业 100 张三 f 计算机 101 李芬 m 会计 102 岳阳 f 园林 图1.1 authors表的结构与记录 1.1.3 数据类型 数据类型决定了数据在计算机中的存储格式,代表不同的信息类型。常用的数据类型有:整数数据类型、浮点数数据类型、精确小数类型、二进制数据类型、日期/时间数据类型、字符串数据类型。 表中的每一个字段就是某种指定数据类型,比如图1.1中“编号”字段为整数数据,“性别”字段为字符型数据。 1.1.4 主键 主键(Primary Key)又称主码,用于唯一地标识表中的每一条记录。可以定义表中的一列或多列为主键,主键列上不能有两行相同的值,也不能为空值。假如,定义authors表,该表给每一个作者分配一个“作者编号”,该编号作为数据表的主键,如果出现相同的值,将提示错误,系统不能确定查询的究竟是哪一条记录;如果把作者的“姓名”作为主键,则不能出现重复的名字,这与现实中的情况不相符合,因此“姓名”字段不适合做为主键。 1.2 数据库技术构成 数据库系统由硬件部分和软件部分共同构成,硬件主要用于存储数据库中的数据,包括计算机、存储设备等。软件部分则主要包括DBMS、支持DBMS运行的操作系统,以及支持多种语言进行应用开发的访问技术等。本节将介绍数据库的技术构成。 1.2.1 数据库系统 数据库系统有3个主要的组成部分。 ? 数据库:用于存储数据的地方。 ? 数据库管理系统:用于管理数据库的软件。 ? 数据库应用程序:为了提高数据库系统的处理能力所使用的管理数据库的软件补充。 数据库提供了一个存储空间用以存储各种数据,可以将数据库视为一个存储数据的容器。一个数据库可能包含许多文件,一个数据库系统中通常包含许多数据库。 数据库管理系统(DataBase Management System,DBMS)是用户创建、管理和维护数据库时所使用的软件,位于用户与操作系统之间,对数据库进行统一管理。DBMS能定义数据存储结构,提供数据的操作机制,维护数据库的安全性、完整性和可靠性。 虽然已经有了DBMS,但是在很多情况下,DBMS无法满足对数据管理的要求。数据库应用程序(DataBase Application)的使用可以满足对数据管理的更高要求,还可以使数据管理过程更加直观和友好。数据库应用程序负责与DBMS进行通信、访问和管理DBMS中存储的数据,允许用户插入、修改、删除DB中的数据。 数据库系统如图1.2所示: 图1.2 数据库系统 1.2.2 SQL语言 对数据库进行查询和修改操作的语言叫做SQL。SQL的含义是结构化查询语言(Structured Query Language)。SQL有许多不同的类型,有3个主要的标准:ANSI(美国国家标准机构)SQL,对ANSI SQL修改后在1992年采纳的标准,称为SQL-92或SQL2。最近的SQL-99标准,从SQL2扩充而来并增加了对象关系特征和许多其他新功能。其次,各大数据库厂商提供不同版本的SQL,这些版本的SQL不但能包括原始的ANSI标准,而且在很大程度上支持SQL-92标准。 SQL包含以下4个部分。 (1)数据定义语言(DDL):DROP、CREATE、ALTER等语句。 (2)数据操作语言(DML):INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。 (3)数据查询语言(DQL):SELECT语句。 (4)数据控制语言(DCL):GRANT、REVOKE、COMMIT、ROLLBACK等语句。 下面是一条SQL语句的例子,该语句声明创建一个名叫students的表: CREATE TABLE students ( student_id INT UNSIGNED, name VARCHAR(30), sex CHAR(1), birth DATE, PRIMARY KEY (student_id) ); 该表包含4个字段,分别为student_id、name、sex、birth,其中student_id定义为表的主键。 现在只是定义了一张表格,但并没有任何数据,接下来这条SQL声明语句,将在students表中插入一条数据记录: INSERT INTO students (student_id, name, sex, birth) VALUES (41048101, 'Lucy Green', ’1’, ’1990-02-14’); 执行完该SQL语句之后,students表中就会增加一行新记录,该记录中字段student_id的值为41048101,name字段的值为Lucy Green,sex字段值为1,birth字段值为1990-02-14。 再使用SELECT查询语句获取刚才插入的数据,如下: SELECT name FROM students WHERE student_id = 41048101; +---------------+ | name | +--------------+ | Lucy Green | +--------------+ 上面简单列举了常用的数据库操作语句,在这里给读者一个直观的印象,读者可能还不能理解,接下来会在学习MySQL的过程中详细介绍这些知识。 1.2.3 数据库访问接口 不同的程序设计语言会有各自不同的数据库访问接口,程序语言通过这些接口,执行SQL语句,进行数据库管理。主要的数据库访问接口有: 1. ODBC Open Database Connectivity(ODBC,开放数据库互连)技术为访问不同的SQL数据库提供了一个共同的接口。ODBC使用SQL作为访问数据的标准。这一接口提供了最大限度的互操作性:一个应用程序可以通过共同的一组代码访问不同的 SQL 数据库管理系统(DBMS)。 一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是Access、MySQL还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。 2. JDBC Java Data Base Connectivity(JDBC,Java数据库连接)用于Java应用程序连接数据库的标准方法,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。 3. ADO.NET ADO.NET是微软在.NET框架下开发设计的一组用于和数据源进行交互的面向对象类库。ADO.NET提供了对关系数据、XML和应用程序数据的访问,允许和不同类型的数据源以及数据库进行交互。 4. PDO PDO(PHP Data Object)为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。PDO是PHP 5新加入的一个重大功能。 针对不同的程序语言,MySQL提供了不同数据库的访问连接驱动,读者可以在下载页面(http://dev.MySQL.com/downloads/)下载相关驱动。 1.3 什么是MySQL MySQL是一个小型关系数据库管理系统,与其他大型数据库管理系统(例如Oracle、DB2、SQL Server等)相比,MySQL规模小、功能有限,但是它体积小、速度快、成本低,且它提供的功能对稍微复杂的应用来说已经够用,这些特性使得MySQL成为世界上最受欢迎的开放源代码数据库。本节将介绍MySQL的特点。 1.3.1 客户机-服务器软件 主从式架构(Client-server model)或客户端-服务器(Client/Server)结构简称C/S结构,是一种网络架构,通常在该网络架构下软件分为客户端(Client)和服务器(Server)。 服务器是整个应用系统资源的存储与管理中心,多个客户端则各自处理相应的功能,共同实现完整的应用。在客户/服务器结构中,客户端用户的请求被传送到数据库服务器,数据库服务器进行处理后,将结果返回给用户,从而减少了网络数据传输量。 用户使用应用程序时,首先启动客户端,通过有关命令告知服务器进行连接以完成各种操作,而服务器则按照此请示提供相应的服务。每一个客户端软件的实例都可以向一个服务器或应用程序服务器发出请求。 这种系统的特点就是,客户端和服务器程序不在同一台计算机上运行,这些客户端和服务器程序通常归属不同的计算机。 主从式架构通过不同的途径应用于很多不同类型的应用程序,比如,现在人们最熟悉的在因特网上使用的网页。例如,当顾客想要在当当网站上买书的时候,电脑和网页浏览器就被当作一个客户端,同时,组成当当网的电脑、数据库和应用程序就被当作服务器。当顾客的网页浏览器向当当网请求搜寻数据库相关的图书时,当当网服务器从当当网的数据库中找出所有该类型的图书信息,结合成一个网页,再发送回顾客的浏览器。服务器端一般使用高性能的计算机,并配合使用不同类型的数据库,比如Oracle、Sybase或者是MySQL等;客户端需要安装专门的软件,比如专门开发的客户端工具浏览器等。 1.3.2 MySQL版本 针对不同用户,MySQL分为两个不同的版本: ? MySQL Community Server(社区版):该版本完全免费,但是官方不提供技术支持。 ? MySQL Enterprise Server(企业版服务器):它能够以很高性价比为企业提供数据仓库应用,支持ACID事物处理,提供完整的提交、回滚、崩溃恢复和行级锁定功能。但是该版本需付费使用,官方提供电话技术支持。 MySQL Cluster主要用于架设集群服务器,需要在社区版或企业版基础上使用。 MySQL的命名机制由3个数字和1个后缀组成,例如:MySQL-5.7.10。 (1)第1个数字(5)是主版本号,描述了文件格式,所有版本5的发行版都有相同的文件格式。 (2)第2个数字(7)是发行级别,主版本号和发行级别组合在一起便构成了发行序列号。 (3)第3个数字(10)是在此发行系列的版本号,随每次新分发版本递增。通常选择已经发行的最新版本。 在MySQL开发过程中,同时存在多个发布系列,每个发布处在成熟度的不同阶段。 (1)MySQL 5.7是最新开发的稳定(GA)发布系列,是将执行新功能的系列,目前已经可以正常使用。 (2)MySQL 5.6是比较稳定(GA)发布系列。只针对漏洞修复重新发布,没有增加会影响稳定性的新功能。 (3)MySQL 5.1是前一稳定(产品质量)发布系列。只针对严重漏洞修复和安全修复重新发布,没有增加会影响该系列的重要功能。 对于MySQL 4.1、4.0和3.23等低于5.0的老版本,官方将不再提供支持。而所有发布的MySQL(Current Generally Available Release)版本已经经过严格标准的测试,可以保证其安全可靠地使用。针对不同的操作系统,读者可以在MySQL官方下载页面(http://dev.MySQL.com/downloads/)下载到相应的安装文件。 1.3.3 MySQL的优势 MySQL的主要优势如下: (1)速度:运行速度快。 (2)价格:MySQL对多数个人来说是免费的。 (3)容易使用:与其他大型数据库的设置和管理相比,其复杂程度较低,易于学习。 (4)可移植性:能够工作在众多不同的系统平台上,例如:Windows、Linux、Unix、Mac OS等。 (5)丰富的接口:提供了用于C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等语言的API。 (6)支持查询语言:MySQL可以利用标准SQL语法和支持ODBC(开放式数据库连接)的应用程序。 (7)安全性和连接性:十分灵活和安全的权限和密码系统,允许基于主机的验证。连接到服务器时,所有的密码传输均采用加密形式,从而保证了密码安全。并且由于MySQL是网络化的,因此可以在因特网上的任何地方访问,提高数据共享的效率。 1.3.4 MySQL 5.7的新功能 和MySQL5.6相比,MySQL5.7的新功能主要包括以下几个方面。 1. 支持JSON JSON(Java Script Object Notation的缩写)是一种存储信息的格式,可以很好地替代XML。从MySQL 5.7.8版本开始,MySQL将支持JSON,而在此版本之前,只能通过strings之类的通用形式来存储JSON文件,这样做的缺陷很明显,就是必须要自行确认和解析数据、解决更新中的困难、在执行插入操作时忍受较慢的速度。 2. 性能和可扩展性 改进InnoDB的可扩展性和临时表的性能,从而实现更快的网络和大数据加载等操作。 3. 改进复制以提高可用性的性能 改进复制包括多源复制、多从线程增强、在线GTIDs和增强的半同步复制。 4. 性能模式提供更好的视角 增加了许多新的监控功能,以减少空间和过载,使用新的SYS模式显著提高易用性。 5. 安全 以安全第一为宗旨,提供了很多新的功能,从而保证数据库的安全。 6. 优化 重写了大部分解析器、优化器和成本模型,这提高了可维护性、可扩展性和性能。 7. GIS MySQL 5.7 全新的功能,包括 InnoDB 空间索引,使用 Boost.Geometry,同时提高完整性和标准符合性。 1.4 MySQL工具 MySQL数据库管理系统提供了许多命令行工具,这些工具可以用来管理MySQL服务器、对数据库进行访问控制、管理MySQL用户以及数据库备份和恢复工具等。而且MySQL提供了图形化的管理工具,这使得对数据库的操作更加简单。本节将为读者介绍这些工具的作用。 1.4.1 MySQL命令行实用程序 MySQL服务器端实用工具程序如下: (1)mysqld:SQL后台程序(即MySQL服务器进程)。该程序必须运行之后,客户端才能通过连接服务器来访问数据库。 (2)mysqld_safe:服务器启动脚本。在UNIX和NetWare中推荐使用mysqld_safe来启动mysqld服务器。mysqld_safe增加了一些安全特性,例如当出现错误时重启服务器并向错误日志文件写入运行时间信息。 (3)mysql.server:服务器启动脚本。在UNIX中的MySQL分发版包括mysql.server脚本。该脚本用于使用包含为特定级别的、运行启动服务的脚本的、运行目录的系统。它调用mysqld_safe来启动MySQL服务器。 (4)mysql_multi:服务器启动脚本,可以启动或停止系统上安装的多个服务器。 (5)myisamchk:用来描述、检查、优化和维护MyISAM表的实用工具。 (6)mysqlbug:MySQL缺陷报告脚本。它可以用来向MySQL邮件系统发送缺陷报告。 (7)mysql_install_db:该脚本用默认权限创建MySQL授权表。通常只是在系统上首次安装MySQL时执行一次。 MySQL客户端实用工具程序如下: (1)myisampack:压缩MyISAM表以产生更小的只读表的一个工具。 (2)mysql:交互式输入SQL语句或从文件以批处理模式执行它们的命令行工具。 (3)mysqlaccess:检查访问主机名、用户名和数据库组合的权限的脚本。 (4)MySQLadmin:执行管理操作的客户程序,例如创建或删除数据库,重载授权表,将表刷新到硬盘上,以及重新打开日志文件。MySQLadmin还可以用来检索版本、进程,以及服务器的状态信息。 (5)mysqlbinlog:从二进制日志读取语句的工具。在二进制日志文件中包含执行过的语句,可用来帮助系统从崩溃中恢复。 (6)mysqlcheck:检查、修复、分析以及优化表的表维护客户程序。 (7)mysqldump:将MySQL数据库转储到一个文件(例如SQL语句或tab分隔符文本文件)的客户程序。 (8)mysqlhotcopy:当服务器在运行时,快速备份MyISAM或ISAM表的工具。 (9)mysql import:使用LOAD DATA INFILE将文本文件导入相关表的客户程序。 (10)mysqlshow:显示数据库、表、列以及索引相关信息的客户程序。 (11)perror:显示系统或MySQL错误代码含义的工具。 1.4.2 MySQL Workbench MySQL Workbench是下一代可视化数据库设计软件,MySQL Workbench为数据库管理员和开发人员提供了一整套可视化数据库操作环境,主要功能有: ? 数据库设计和模型建立。 ? SQL开发(取代MySQL Query Browser)。 ? 数据库管理(取代MySQL Administrator)。 MySQL Workbench有两个版本: (1)MySQL Workbench Community Edition(也叫MySQL Workbench OSS,社区版),MySQL Workbench OSS是在GPL证书下发布的开源社区版本。 (2)MySQL Workbench Standard Edition(也叫MySQL Workbench SE,商业版),MySQL Workbench SE是按年收费的商业版本。 截至本书完稿时,最新版本为MySQL Workbench 5.2.34。一些出版时间较早的MySQL教程中会提到图形化的工具MySQL Query Browser和MySQL Administrator。随着MySQL的发展,Oracle公司使用更高效、便捷的Workbench替换掉了这两个工具,目前官方已经不再提供MySQL Query Browser和MySQL Administrator的技术支持和更新,但是仍然可以在使用旧版本MySQL时使用它们。 1.5 如何学习MySQL 在学习MySQL数据库之前,很多读者都会问如何才能学习好MySQL 5.7的相关技能呢?下面就来讲述学习MySQL的方法。 1. 培养兴趣 兴趣是最好的老师,不论学习什么知识,兴趣都可以极大地提高学习效率。当然学习MySQL 5.7也不例外。 2. 夯实基础 计算机领域的技术非常强调基础,刚开始学习可能还认识不到这一点,随着技术应用的深入,只有有着扎实的基础功底,才能在技术的道路上走得更快、更远。对于MySQL的学习来说,SQL语句是其中最为基础的部分,很多操作都是通过SQL语句来实现的。所以在学习的过程中,读者要多编写SQL语句,对于同一个功能,使用不同的实现语句来完成,从而深刻理解其不同之处。 3. 及时学习新知识 正确、有效地利用搜索引擎,可以搜索到很多关于MySQL 5.7的相关知识。同时,参考别人解决问题的思路,也可以吸取别人的经验,及时获取最新的技术资料。 4. 多实践操作 数据库系统具有极强的操作性,需要多动手上机操作。在实际操作的过程中才能发现问题,并思考解决问题的方法和思路,只有这样才能提高实战的操作能力。