写在前面

MySQL数据库在实际工作中使用的较多,因此有必要抽出一定时间进行一个较为系统的总结,本套笔记是从2017年开始到2019年近三年的使用总结,里面涉及的东西很多,需要仔细学习和体会。

本篇主要学习以下内容:(1)数据库简述;(2)数据库特点;(3)数据库存储数据的特点;(4)数据表;(5)数据类型;(6)主键;(7)SQL语言;(8)数据库访问接口;(9)什么是MySQL;(10)客户端-服务器软件;(11)MySQL版本;(12)MySQL的优势;(13)MySQL5.7新功能;(14)MySQL服务端工具程序;(15)MySQL客户端工具程序;(16)MySQL启动;(17)MySQL登录命令;(18)其他常用命令;(19)MySQL语法规范。

数据库简述

数据库发展:人工管理阶段、文件系统阶段、数据库系统阶段、高级数据库阶段。种类大概有:层次式数据库、网络式数据库和关系型数据库,不同种类的数据库按照不同的数据结构来联系和组织。

数据库是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。它是一个按照数据结构来存储和管理数据的计算机软件系统,即数据库包含两层含义:保管数据的仓库,以及数据管理的方法和技术。

数据库特点

数据库的特点包括:实现数据共享,减少数据冗余;采用特定的数据;类型;具有较高的数据独立性;具有统一的数据控制功能。

数据库存储数据的特点

数据库存储数据的特点包括:数据存放在表中,表存放在数据库中;一个库中可以有多张表,每张表具有唯一的名称(也就是表名)来标识自己;表中有一个或多个列(又称字段),相当于java中的属性;表中每一行数据,相当于java中的一个对象。

数据表

在关系型数据库中,数据库表是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构。它由纵向的列和横向的行组成,行被称为记录,是组织数据的单位;列被称为字段,每一列表示记录的一个属性,都有相应的描述信息,如数据类型、数据宽度等。

数据类型

数据类型决定了数据在计算机中的存储格式,代表不同的信息类型。常用的数据类型有:整数数据类型、浮点数据类型、精确小数类型、二进制数据类型、日期/时间数据类型、字符串数据类型。

主键

主键PrimaryKey,用于唯一地标识表中的每一条记录。可以定义表中的一列或者多列为主键,主键列上不能有两行相同的值,也不能为空值。

SQL语言

对数据库进行查询和修改的语言叫做SQL,SQL的含义是结构化查询语言(Structured Query Language)。SQL包含以下4个部分:(1)数据定义语言(DDL):DROP、CREATE、ALTER等语句;(2)数据操作语言(DML):INSERT、UPDATE、DELETE等语句;(3)数据查询语言(DQL):SELECT语句;(4)数据控制语言(DCL):GRANT、REVOKE、COMMIT、ROLLBACK等语句。

举个例子,下面是一条用于创建一个名为students表的SQL语句:

1
2
3
4
5
6
7
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表中插入一条数据记录:

1
2
INSERT INTO students(student_id,name,sex,birth)
VALUES(20180218,"envy",'1','2018-02-18');

执行完该SQL语句后,students表中就会增加一行新的记录,该记录中字段student_id的值为20180218,name字段的值为envy,sex字段的值为1,birth字段值为2018-02-18。如果此时再使用SELECT查询语句获取刚才插入的数据,使用的语句如下所示:

1
SELECT name FROM students WHERE student_id =20180218;

就会出现name属性值为envy的信息。这里只是举了一个非常简单的例子来提前学习一下SQL。

数据库访问接口

不同的程序语言会有各自不同的数据库访问接口,程序会通过这个接口来执行SQL语句,进行数据库的管理。笔者常用的数据库访问接口有:

(1)ODBC(Open DataBase Connectivity,开放数据库互连),该技术为访问不同的SQL数据库提供了一个共同的接口。ODBC使用SQL作为访问数据的标准。这一接口提供了最大限度的互操作性:一个应用程序可以通过共同的一组代码访问不同的SQL数据库管理系统(DBMS)。一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是Acess、MySQL还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点就是能以统一的方式处理所有的数据库。
(2)JDBC(Java DataBase Connectivity,java数据库连接)用于Java应用程序连接数据库的标准方法,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,由一组用Java语言编写的类和接口组成。
(3)pymysql/mysqlclient。这是一个使用Python语言编写的用于执行SQL语句的API。当然不止这三个,还有其他的程序语言,这里就不仔细介绍。

MySQL数据库

什么是MySQL

MySQL是一个小型的开源关系型数据库管理系统,与其他大型关系数据库管理系统(如Oracle、DB2、SQL Server等)相比,MySQL规模小、功能有限,但是它体积小、速度快、成本低、且提供的功能对稍微复杂的应用来说已经足够用,这些使得MySQL成为世界上最受欢迎的开源数据库。

客户端-服务器软件

主从式架构(Client-Server Model)或者客户端-服务端(Client/Server)结构,简称C/S架构。C/S架构是一种网络架构,通常在该网络架构下软件分为客户端(Client)和服务器(Server)。
服务器是整个应用系统资源的存储与管理中心,多个客户端则各自处理相应的功能,共同实现完整的应用。在C/S架构中,客户端用户的请求被传送到数据库服务器,数据库服务器进行处理后,将结果返回给用户,从而减少了网络数据传输量。

用户使用应用程序时,首先启动客户端,通过有关命令告知服务器进行连接以完成各种操作,而服务器则按照此请示提供相应的服务。每一个客户端软件的实例都可以向一个服务器或应用程序服务器发出请求。

这种系统的特点就是:客户端和服务器程序不在同一台计算机上运行,这些客户端和服务器程序通常归属不同的计算机。

C/S架构通过不同的途径应用于很多不同类型的应用程序。举一个非常简单的例子,当顾客需要在淘宝网上买衣服的时候,此时电脑和网页浏览器就被当作一个客户端,同时组成淘宝网的电脑、数据库和应用程序就被当做服务器。当顾客的网页浏览器向淘宝网请求搜索夏季相关的衣服时,淘宝网服务器从淘宝网的数据库中找到所有该类型的衣服,聚合成一个网页,再发送回顾客的浏览器。服务器一般使用较高性能的计算机,并配合使用不同类型的数据库,如Oracle、SQL Sever、Sybase或者MySQL等,但是请注意此时的客户端必须是专门的软件,如专门开发的客户端工具浏览器等,并不是普通的浏览器。

MySQL版本

MySQL提供了两个不同的版本:社区版和企业版。其中社区版免费,而企业版收费,不过它支持ACID事务处理、提供完整的提交、回滚、奔溃恢复和行级锁定功能。请注意经常说的MySQL Cluster则主要用于搭建数据库集群,它可以在社区版或者企业版的基础上进行使用。

MySQL的优势

MySQL的主要优势如下:(1)运行速度快;(2)免费,开源;(3)容易使用,极易上手,学习成本较低;(4)可移植性强,能够在多个系统上运行;(5)提供了多个语言的API接口;(6)MySQL可以使用标准的SQL语法,还可以使用ODBC(开放式数据库连接)的应用程序;(7)十分灵活和安全的权限和密码系统,允许基于主机的验证。连接到服务器时,所有的密码传输均采用加密形式,从而保证密码安全,加之mysql是网络化的,因此可以在互联网上的任何地方进行访问,提高了数据共享的效率。

MySQL5.7新功能

(1)支持JSON。JSON(JavaScript Object Notation)是一种存储信息的格式,可以很好地替代XML。从MySQL5.7.8版本开始,MySQL将支持JSON,而之前只能通过strings之类的通用形式来存储JSON文件,这样做的缺陷很明显,就是必须自行确认和解析数据、解决更新中的困难,在执行插入操作时的速度慢等问题。(2)性能和可扩展性。改进InnoDB的可扩展性和临时性表的性能,以实现更快的网络和大数据加载等操作;(3)改进复制以提高可用性的性能。改进复制包括多源复制、多线程增强、在线GTIDs和增强的半同步复制。(4)性能模式提供更好的视角。增加了许多新的监控功能,以减少空间和过载,使用新的SYS模式显著提供易用性。(5)GIS。MySQL5.7新功能包括InnoDB空间索引,使用Boost.Geometry,同时提高完整性和标准符合性。

MySQL工具

MySQL数据库管理系统提供了许多命令行工具,这些工具可以用来管理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时执行一次。

客户端工具程序

(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错误代码含义的工具。

MySQL启动

由于MySQL安装教程很多,因此这里跳过。这里以Windows系统上如何使用 MySQL为例,来学习使用MySQL数据库。

启动方式1:在cmd窗口中输入services.msc,然后进入到服务窗口,找到MySQL对应的服务,然后设置开机自动启动即可。

启动方式2:以管理员身份运行cmd命令,然后在终端输入net start mysql命令来启动MySQL;输入net stop mysql命令来停止MySQL的运行。

MySQL登录命令

开发者可以使用如下格式命令来登录到MySQL:

1
mysql -h IP地址 -P 端口号 -u 用户名 -p 密码

注意几点内容:(1)-h参数后面跟的是IP地址;(2)-P(大写)参数后面跟的是端口号;(3)-p(小写)参数后面跟的是用户密码;(4)-u参数后面跟的是用户名;(5)如果登录的是本机,那么IP地址和端口号可以省略,此时命令就变成mysql -u 用户名 -p 密码了。

其他常用命令

(1)当用户未登录时,可以使用如下命令来查看本机MySQL的版本:

1
mysql --version

(2)在登录情况下,查看数据库的版本信息:

1
select version();

(3)在登录情况下,查看数据库中所有的数据库:

1
show databases;

(4)在登录情况下,进入指定的数据库:

1
use database_name;

(5)在登录情况下,显示当前数据库中所有的数据表:

1
show tables;

(6)在登录情况下,查询其他数据库中所有的数据表:

1
show tables from database_name;

(7)在登录情况下,查看表的创建语句:

1
show create table table_name;

(8)在登录情况下,查看表的结构:

1
desc table_name;

MySQL语法规范

接下来学习Mysql的一些语法规范,这样在平时使用的时候尽量按照规范的要求进行。
(1)MySQL不区分大小写,但是建议关键字大写,表名和列名都是小写;
(2)每条命令最好使用英文分号结尾;
(3)每条命令可根据实际需要来进行缩进或者换行;
(4)合理使用注释,让别人更加易懂你的SQL。使用#来单行注释,也可以使用-- 注释文字来进行单行注释,至于多行注释,可以使用/* 注释文字 */

本篇文章只是对数据库和MySQL进行一个概述,具体的内容需要往后学习。

参考文章:路人甲Java菜鸟教程