一、单元概述
通过本章的学习能够了解MySQL语言的基础概念,MySQL数据库的软件安装过程以及MySQL数据库可视化工具的操作
二、教学重点与难点
重点:

  • MySQL软件安装

难点:

  • 构建MySQL实验数据的环境

    1.1 数据库基础概述

    1.1.1 数据库管理系统概述

  • 数据库(DB)是一种专门存储信息和维护信息的容器,严格地说数据库是“按照数据结构来组织、存储和管理信息的仓库”。

  • 数据库管理系统(Database Management System-DBMS)管理数据库的软件。具有对数据存储、安全、一致性、并发操作、恢复和访问等功能。

    1.1.2 数据库特征

  • 数据结构化

  • 实现数据共享
  • 减少数据冗余
  • 数据独立性

    1.1.3 数据库类型

  • 网状型数据库

  • 层次型数据库
  • 关系型数据库

    1.1.4 关系型数据库

  • 关系型数据库管理系统(RDBMS)是应用最广泛的一种数据库管理系统,关系型数据库管理系统以表、字段和记录等结构来组织数据。表用来保存数据,每个表由一组字段来定义其结构,记录则是表中的一条数据。

01.MySQL数据库基础 - 图1

  • 关系数据库是指一些相关的表和其他数据库对象的集合。对于关系数据库来说,关系就是表的同义词。
  • 表是由行和列组成(类似二维数组的结构)。
    • 列包含一组命名的属性(也称字段)。
    • 行包含一组记录,每行包含一条记录。
    • 行和列的交集称为数据项,指出了某列对应的属性在某行上的值,也称为字段值。
    • 列需定义数据类型,比如整数或者字符型的数据。
  • 关系数据库的数据结构图示:

01.MySQL数据库基础 - 图2

1.1.5 常见关系数据库

  1. Oracle
  2. DB2
  3. Sybase
  4. Microsoft SQL Server
  5. MySQL

MySQL就是当前Web开发中尤其是JavaWEB开发中使用最为广泛的数据库。

1.2 MySQL数据库

1.2.1 MySQL数据库系统简介

  • MySQL是由瑞典 MySQL AB公司开的一种开放源代码的关系型数据库管理系统(RDBMS),目前属于 Oracle 旗下产品。MySQL数据库系统使用最常用的数据库管理语言——结构化查询语言(SQL)进行数据库管理。由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。

    1.2.2 MySQL的Windows系统下安装

    下载MySQL的安装包 如下是6.0.11的下载地址:http://www.pc6.com/softview/SoftView_41452.html

  • 点击mysql-essential-6.0.11-alpha-win32.msi,会出现安装向导,如下图。 01.MySQL数据库基础 - 图3

  • 选择安装类型,一般都分为【Typical】【Complete】【Custom】。一般我们会选择【Typical】或【Complete】就可以了,如果要看一下安装细节,可以选择【Custom】,然后按【Next】继续。 01.MySQL数据库基础 - 图4
  • 选择安装路径。视硬盘的大小自行选择。然后按【OK】。 01.MySQL数据库基础 - 图5
  • 当前的安装设置信息,如果需要改变这些安装设置,可以按【Back】重新选择安装设置,确定无误之后按【Install】将MySQL安装到本地硬盘上。 01.MySQL数据库基础 - 图6
  •  请耐心等待,安装向导正在安装MySQL,这需要话几分钟。 01.MySQL数据库基础 - 图7
  • 这里只选择【Configure the MySQL Serve now】,如果你想注册MySQL也可以选择。确定后按【Finish】完成安装,接着进行服务器的配置。
  • 01.MySQL数据库基础 - 图8
  • 选择配置类型,分为【Detialed Configuration】(详细配置),【Standard Configuration】(标准配置)。为了了解整个详细的配置过程,我们选择【Detialed Configuration】后按【Next】继续。 01.MySQL数据库基础 - 图9
  • 这里是选择服务器的类型。三种类型:【Developer Machine】(开发者类型),只占用很好的资源,消耗的内存资源最少。建议一般用户选择这项。【Server Machine】(服务器类型),占用的可用资源稍多一些,消耗的内存资源当然就多一些。【Dedicate MySQL Server Machine】(专门的数据库服务器),占用所有的可用资源,消耗内存最大。选好按【Next】继续。 01.MySQL数据库基础 - 图10
  • 选择数据库的用途。【Multifunctional Database】,可以理解为通用行的数据库,支持所有数据库的操作,【Transaction Database Only】只进行事务处理,专用的服务类型。【Non-Transactional Database Only】非事务性处理,一般只进行监控,应用程序的数据分析,对MyISAM数据类型的支持仅限于非事务。主要一用途为主,这里选择第一项【Multifunctional Database】,然后按【Next】继续。 01.MySQL数据库基础 - 图11
  • 对InnoDB Tablespace 进行设置,选择MySQL数据存放的位置空间。特别注意的一点,选择这个位置很重要,因为数据文件存放于此,确保数据文件不被破坏。这里选择安装路径下的空间作为数据表空间,按【Next】继续。 01.MySQL数据库基础 - 图12
  • 设置服务器当前连接的数,【Decision Support DSS/OLAP】,这个不需要很多的连接数,一般在20个左右,【Online Transaction Processing(OLTP)】,连接数500个左右,一般自己的开发测试用选择这一项足够了,【Manual Setting】可以手动设置连接数。这里选择【Onine Transaction Processing (OLTP)】,按【Next】继续。 01.MySQL数据库基础 - 图13
  • 【Enable TCP/IP Networking】启用TCP/IP连接,一般选择默认的就可以,也不要改变端口号,免得以后忘记;【Enable Strict Mode】启用严格模式,启用它的好处可以控制MySQL的数据的安全性。在这里,选择默认的就可以,按【Next】继续。这一步也很关键,设置字符集,【Standard Character Set】默认字符集,支持的其它字符的很少;【Best Support For Multilingualism】能支持大部分语系的字符,主要是以UTF-8的形式存储,所以一般选择这一项; 01.MySQL数据库基础 - 图14
  • 这一步也很关键,设置字符集,【Standard Character Set】默认字符集,支持的其它字符的很少;【Best Support For Multilingualism】能支持大部分语系的字符,主要是以UTF-8的形式存储,所以一般选择这一项; 01.MySQL数据库基础 - 图15
  • 设置root帐户的密码。如果是第一次安装MySQL直接输入一个新密码就OK了 01.MySQL数据库基础 - 图16
  • 按【Execute】完成配置操作。值得注意的是在进行配置的时候容易出现一个问题,【Start service】操作失败,出现这个情况的原因是有其他MySQL的数据库在电脑里,当然办法也很简单,停止以前不用的MySQL服务,或者将其删除,然后再重新配置。 01.MySQL数据库基础 - 图17

    1.2.3 启动服务

  • 在进行MySQL配置过程中,设置Windows选项时若选择将MySQL安装为Windows的服务。可依次双击【我的电脑】 | 【控制面板】 | 【管理工具】 | 【服务】,在【服务】窗口中双击【MySQL】服务,在弹出的对话框中可单击【启动】按钮启动MySQL服务器。 01.MySQL数据库基础 - 图18

    1.2.4 停止服务

  • 与启动MySQL服务器相对应,停止MySQL服务器也可有对应的几种方式。若在配置MySQL服务器时将MySQL安装为Windows服务,停止MySQL服务器可依次双击【我的电脑】 | 【控制面板】 | 【管理工具】 | 【服务】,在【服务】窗口中双击【MySQL】服务,在弹出的对话框中可单击【停止】按钮即可停止MySQL服务器。 01.MySQL数据库基础 - 图19

    1.3 MySQL可视化工具

    1.3.1 安装SQLyog可视化开发工具

    下载安装包:https://sqlyog.en.softonic.com/download

  • 解压出Webyog_SQLyog_setup.exe安装程序双击运行开始安装。 01.MySQL数据库基础 - 图20

  • 同意安装许可协议,一直点击下一步。01.MySQL数据库基础 - 图21
  • 其他的安装步骤全部默认,一直到安装完成。 01.MySQL数据库基础 - 图22

    1.3.2 SQLyog可视化开发工具使用

  • 点击新建,新建MySQL数据库连接,随便输入一个名称,点击下一步。 01.MySQL数据库基础 - 图23

  • 填写MySQL数据库的IP,用户,密码,端口,点击测试连接。 01.MySQL数据库基础 - 图24
  • 如果显示成功,再点击连接按钮就OK了 01.MySQL数据库基础 - 图25
  • 连接上MySQL数据库后就可以对MySQL数据库进行管理了。 01.MySQL数据库基础 - 图26

    1.4 构建测试数据

  • 将以下脚本SQL语句全部复制到test库下的查询窗口并执行 01.MySQL数据库基础 - 图27

  • 测试数据脚本

    drop TABLE emp;
    drop TABLE dept;
    drop TABLE salgrade;
    create table dept
    (
    deptno integer(4) not null,
    dname varchar(14),
    loc varchar(13)
    );
    alter table dept add constraint pk_dept primary key (deptno);
    create table emp
    (
    empno integer(4) not null,
    ename varchar(10),
    job varchar(9),
    mgr integer(4),
    hiredate date,
    sal decimal(7,2),
    comm decimal(7,2),
    deptno integer(2)
    );
    alter table emp add constraint pk_emp primary key (empno);
    alter table emp add constraint fk_deptno foreign key (deptno) references dept (deptno);
    create table salgrade
    (
    grade integer(1),
    losal decimal(7,2),
    hisal decimal(7,2)
    );
    insert into DEPT (DEPTNO, DNAME, LOC) values (10, 'ACCOUNTING', 'NEW YORK');
    insert into DEPT (DEPTNO, DNAME, LOC) values (20, 'RESEARCH', 'DALLAS');
    insert into DEPT (DEPTNO, DNAME, LOC) values (30, 'SALES', 'CHICAGO');
    insert into DEPT (DEPTNO, DNAME, LOC) values (40, 'OPERATIONS', 'BOSTON');
    insert into SALGRADE (GRADE, LOSAL, HISAL) values (1, 700, 1200);
    insert into SALGRADE (GRADE, LOSAL, HISAL) values (2, 1201, 1400);
    insert into SALGRADE (GRADE, LOSAL, HISAL) values (3, 1401, 2000);
    insert into SALGRADE (GRADE, LOSAL, HISAL) values (4, 2001, 3000);
    insert into SALGRADE (GRADE, LOSAL, HISAL) values (5, 3001, 9999);
    -- 下面要特别注意,%d-%m-%Y 里的 d 和 m 一定要小写
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7369, 'SMITH', 'CLERK', 7902, STR_TO_DATE('17-12-1980', '%d-%m-%Y'), 800.00, null, 20);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7499, 'ALLEN', 'SALESMAN', 7698, STR_TO_DATE('20-02-1981', '%d-%m-%Y'), 1600.00, 300.00, 30);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7521, 'WARD', 'SALESMAN', 7698, STR_TO_DATE('22-02-1981', '%d-%m-%Y'), 1250.00, 500.00, 30);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7566, 'JONES', 'MANAGER', 7839, STR_TO_DATE('02-04-1981', '%d-%m-%Y'), 2975.00, null, 20);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7654, 'MARTIN', 'SALESMAN', 7698, STR_TO_DATE('28-09-1981', '%d-%m-%Y'), 1250.00, 1400.00, 30);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7698, 'BLAKE', 'MANAGER', 7839, STR_TO_DATE('01-05-1981', '%d-%m-%Y'), 2850.00, null, 30);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7782, 'CLARK', 'MANAGER', 7839, STR_TO_DATE('09-06-1981', '%d-%m-%Y'), 2450.00, null, 10);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7788, 'SCOTT', 'ANALYST', 7566, STR_TO_DATE('19-04-1987', '%d-%m-%Y'), 3000.00, null, 20);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7839, 'KING', 'PRESIDENT', null, STR_TO_DATE('17-11-1981', '%d-%m-%Y'), 5000.00, null, 10);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7844, 'TURNER', 'SALESMAN', 7698, STR_TO_DATE('08-09-1981', '%d-%m-%Y'), 1500.00, 0.00, 30);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7876, 'ADAMS', 'CLERK', 7788, STR_TO_DATE('23-05-1987', '%d-%m-%Y'), 1100.00, null, 20);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7900, 'JAMES', 'CLERK', 7698, STR_TO_DATE('03-12-1981', '%d-%m-%Y'), 950.00, null, 30);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7902, 'FORD', 'ANALYST', 7566, STR_TO_DATE('03-12-1981', '%d-%m-%Y'), 3000.00, null, 20);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7934, 'MILLER', 'CLERK', 7782, STR_TO_DATE('23-01-1982', '%d-%m-%Y'), 1300.00, null, 10);
    
  • 查看测试数据 01.MySQL数据库基础 - 图28

    1.5 存储引擎

  • 存储引擎就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎简而言之就是指表的类型。数据库的存储引擎决定了表在计算机中的存储方式。

  • 在Oracle和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySQL数据库提供了多种存储引擎,用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎,MySQL的核心就是存储引擎。

    1.5.1 InnoDB存储引擎

  • InnoDB存储引擎的特点:

    • 支持外键(Foreign Key)
    • 支持事务(Transaction):如果某张表主要提供OLTP支持,需要执行大量的增、删、改操作(insert、delete、update语句),出于事务安全方面的考虑,InnoDB存储引擎是更好的选择。
    • 最新版本的MySQL已经开始支持全文检索。

      1.5.2 MyISAM存储引擎

  • MyISAM存储引擎的特点:

    • MyISAM具有检查和修复表的大多数工具。
    • MyISAM表可以被压缩
    • MyISAM表最早支持全文索引
    • 但MyISAM表不支持事务
    • 但MyISAM表不支持外键(Foreign Key)。
    • 如果需要执行大量的select语句,出于性能方面的考虑,MyISAM存储引擎是更好的选择。

      1.5.3 MEMORY存储引擎

  • MEMORY存储引擎的特点:

    • MEMORY存储引擎是MySQL中一类特殊的存储引擎。该存储引擎使用存在于内存中的内容来创建表,每个表实际对应一个磁盘文件,格式为.frm。这类表因为数据在内存中,且默认使用HASH索引,所以访问速度非常快;但一旦服务关闭,表中的数据会丢失。
    • 每个MEMORY表可以放置数据量的大小受max_heap_table_size系统变量的约束,初始值为16MB,可按需求增大。此外,在定义MEMORY表时可通过MAX_ROWS子句定义表的最大行数。
    • 该存储引擎主要用于那些内容稳定的表,或者作为统计操作的中间表。对于该类表需要注意的是,因为数据并没有实际写入磁盘,一旦重启,则会丢失。
  • MySQL5.7默认的默认的存储引擎是InnoDB。

    1.5.4 存储引擎的选择

  • 不同存储引擎都有各自的特点,以适应不同的需求

  • MySQL存储引擎功能对比 | 功 能 | InnoDB | MyISAM | Memory | | —- | —- | —- | —- | | 存储限制 | 64TB | 256TB | RAM | | 支持事务 | 支持 | 无 | 无 | | 空间使用 | 高 | 低 | 低 | | 内存使用 | 高 | 低 | 高 | | 支持数据缓存 | 支持 | 无 | 无 | | 插入数据速度 | 低 | 高 | 高 | | 支持外键 | 支持 | 无 | 无 |

1.6 MySQL字符集

  • 字符(Character)是指人类语言最小的表义符号,例如’A’、’B’等。
  • 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这个数值就是字符的编码(Character Encoding)。
  • 给定一系列字符并赋予对应的编码后,所有这些字符和编码对组成的集合就是字符集(Character Set)。MySQL中提供了多种字符集,例如latin1、utf8、gbk等。
  • 字符序(Collation)是指在同一字符集内字符之间的比较规则。只有确定字符序后,才能在一个字符集上定义什么是等价的字符,以及字符之间的大小关系。每个字符序唯一对应一种字符集,一个字符集可以对应多种字符序,其中有一个是默认字符序(Default Collation)。
  • MySQL中的字符序命名规则:以字符序对应的字符集名称开头,以国家名居中(或以general居中),以ci或cs或bin末尾。例如:latin1字符集对应有latin1_swedish_ci、latin1_spanish_ci、latin1_german1_ci等字符序。以ci结尾的字符序表示大小写不敏感;以cs结尾的字符序表示大小写敏感;以bin结尾的字符序表示按编码值比较。例如在字符序gbk_general_ci规则中,字符’a’和’A’是等价的。
  • MySQL提供的下列命令可以在不影响其它数据库字符集的基础上临时修改当前的字符集
    • SET character_set_client = gbk;
    • SET character_set_connection = gbk;
    • SET character_set_database = gbk;
    • SET character_set_results = gbk;
    • SET character_set_server = gbk;
    • SET collation_connection = gbk_chinese_ci ;
    • SET collation_database = gbk_chinese_ci ;
    • SET collation_server = gbk_chinese_ci ;

小结

  • 理解数据库基本概念
  • 掌握MySQL环境的安装
  • 构建MySQL测试数据的环境

课后作业

  1. 在自己机器上安装MySQL软件,并查看数据库。
  2. 在MySQL上构建测试数据库