一、基本概念

数据库早期历史

1961年,GE(通用电气公司,General Electric Company)的Charles Bachman ,开发了IDS(集成数据存储,Integrated Data Store),这是世界上第一个NDBMS(网状数据库管理系统,Network Database Management System),也是第一个数据库管理系统。
1968年, IBM(国际商业机器公司,International Business Machines Corporation)的Vern Watts,开发了IMS(信息管理系统,Information Management System),这是世界上第一个HDBMS(层次数据库管理系统,Hierarchical Database Management System)。
1970年,IBM公司的研究员Edgar F. Codd(埃德加·科德),发表了论文《大型共享数据库数据的关系模型》(A Relational Model of Data for Large Shared Data Banks)。该论文提出了关系数据模型,奠定了关系模型的理论基础,科德也被誉为“关系数据库之父”
1974年,IBM公司的San Jose 实验室,启动了System R项目,其目标是论证一个全功能RDBMS的可行性。该项目结束于1979年,它是SQL 语言的第一次实现。
1973年,UCB(加州大学伯克利分校,University of California, Berkeley)的Michael Stonebraker和EugeneWong,利用System R的公开信息,开发了Ingres(交互式图形和检索系统,INteractive Graphics REtrieval System)。该项目结束于1985年,在Ingres 基础上产生了很多商业数据库软件,包括 Sybase、Microsoft SQL Server、NonStop SQL、Informix等。
1976年,Honeywell(霍尼韦尔)公司,开发了MRDS(Multics关系数据存储,Multics Relational Data Store),这是第一个商用关系数据库系统。
1982年,Stonebraker离开伯克立大学,创建了Ingres 公司。

数据库排行

  • MySQL:开源免费的数据库,小型的数据库,已经被 Oracle 收购了。MySQL6.x 版本也开始收费。1996年,瑞典 MySQL AB 公司发布了MySQL 1.0版本,后来 Sun公司收购了 MySQL,而 Sun 公司又被 Oracle 收购。
  • Oracle:收费的大型数据库,Oracle 公司的产品。
  • DB2 :IBM 公司的数据库产品,收费的。常应用在银行系统中。
  • SQL Server:MicroSoft 公司收费的中型的数据库。C#、.net 等语言常使用。
  • SQLite: 嵌入式的小型数据库,应用在手机端,如:Android。

    数据库能够做什么

  • 存储大量数据,方便检索和访问

  • 保持数据信息的一致、完整
  • 共享和安全
  • 通过组合分析,产生新的有用信息

    数据的存储方式

    image-20201213112352966.png

    数据库基本概念

    数据库

    以一定的组织方式将相关的数据组织在一起存放在 计算机外存储器上(有序的仓库),能为多个用户共享,与应用程序彼此独立的一组相关数据的集合

  • 数据库就是“数据”的“仓库”

  • 数据存放在表中

image-20201213101512179.png

客观存在的、可以被描述的事物都是“实体”

  • 数据库由表、关系以及操作对象组成

image-20201213101628499.png

数据结构

数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。

DB

DB:数据库(Database)

DBMS

DBMS:数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。

DBA

DBA:数据库管理员(Database Administrator),是从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称,属于运维工程师的一个分支,主要负责业务数据库从设计、测试到部署交付的全生命周期管理。

DBS

DBS:数据库系统(Database System),是指带有数据库并利用数据库技术进行数据管理的计算机系统。
数据库系统一般由4个部分组成:数据库,数据库管理系统,数据库管理员,用户和应用程序。
image-20201213102142906.png

数据库分类

image-20201213115814683.png

二、MySQL

MySQL历史

MySQL原本是一个开放源代码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,该公司于2008年被Sun公司收购。2009年,甲骨文公司收购Sun公司,MySQL成为Oracle旗下产品。
MySQL 官网:https://www.mysql.com/
1990年,TcX公司的的客户,要求为报表工具Unireg的API,提供SQL支持。当时的商用数据库速度很难令人满意。于是,Monty决定自己重写一个SQL支持。
1995年,Michael Widenius(Monty), David Axmark and Allan Larsson,在瑞典创立了MySQL AB公司。
1996年,瑞典 MySQL AB 公司发布了MySQL 1.0版本。
1996年10月,MySQL 3.11.1发布。
2001年,MySQL集成Heikki Tuuri的存储引擎InnoDB,这个引擎不仅能持事务处理,并且支持行级锁。
2003年3月,MySQL 4.0 发布,支持查询缓存、集合并、全文索引、InnoDB存储引擎。
2004年10月,MySQL 4.1 发布,增加了子查询,utf8字符集,GROUP BY语句增加了ROLLUP,mysql.user表采用了更好的加密算法。
2005年10月,MySQL 5.0 发布,增加了视图、存储过程、游标、触发器、分布式事务。
2008年1月,MySQL AB公司 被Sun公司以10亿美金收购。
2008年11月,MySQL 5.1 发布,增加了分区、事件管理,以及基于行的复制和基于磁盘的NDB集群系统,同时修复了大量的Bug。
2009年4月20日,Oracle公司以74亿美元收购Sun公司。
2010年12月,MySQL 5.5 发布,增加了半同步复制、信号异常处理、unicode字符集,InnoDB成为默认存储引擎。
2011年4月,MySQL 5.6 发布,增加了GTID复制,支持延时复制、行级复制。
2013年4月,MySQL 5.6 GA 发布,支持在线DDL、并行复制。
2013年2月,MySQL 5.7 发布,支持原生JSON数据类型。
2015年8月,MySQL 5.7 GA 发布,支持原生JSON数据类型。
2016年9月12日,MySQL 8.0.0 发布,速度要比 MySQL 5.7 快 2 倍;增加了SQL窗口函数,公用表表达式,NOWAIT和SKIP LOCKED,降序索引,分组,正则表达式,字符集,成本模型和直方图;JSON扩展语法,新功能,改进排序和部分更新。使用JSON表函数,可以使用JSON数据的SQL机制;GIS地理支持。空间参考系统(SRS),以及SRS感知空间数据类型,空间索引和空间功能。可靠性 DDL语句已变得原子性和崩溃安全,元数据存储在单个事务数据字典中。
2018年4月19日,MySQL 8.0.11 GA 发布,支持NoSQL文档存储、原子的奔溃安全DDL语句、扩展JSON语法,新增JSON表函数,改进排序、分区更新功能。

MySQL版本

  1. MySQL Community Server 社区版本,开源免费,但不提供官方技术支持。
  2. MySQL Enterprise Edition 企业版本,需付费,可以试用30天。
  3. MySQL Cluster 集群版,开源免费。可将几个MySQL Server封装成一个Server。
  4. MySQL Cluster CGE 高级集群版,需付费。
  5. MySQL Workbench(GUITOOL)一款专为MySQL设计的ER/数据库建模工具。它是著名的数据库设计工具DBDesigner4的继任者。MySQLWorkbench又分为两个版本,分别是社区版(MySQL Workbench OSS)、商用版(MySQL WorkbenchSE)。

    MySQL安装

    1、双击MySQL-5.7.38.0的安装文件,选择同意协议
    image.png
    2、选择开发者的默认配置
    image.png
    3、MySQL安装需要一些环境,如没有安装在联网状态下可点击execute进行下载安装
    如果没有网,就直接单击next,代表不安装以上窗口的内容
    image.png
    4、准备环境安装好了,点击下一步
    image.png
    点击”是”,下一步
    image.png
    5、点击开始安装MySQL程序
    image.png
    6、安装完成,下一步
    image.png
    7、下一步
    image.png
    8、下一步
    image.png
    9、设置管理员的密码
    image.png
    10、默认下一步
    image.png
    11、下一步
    image.png
    12、应用服务器的配置
    image.png
    13、下一步
    image.png
    14、输入管理员密码,测试可以连接成功
    image.png
    15、下一步
    image.png
    16、下一步
    image.png
    17、下一步
    image.png
    18、完成
    image.png
    19、只要有 MySQL command 就可以了
    image.png

    MySQL卸载

    uninstall.png

    服务的启动与停止

    1、windows服务方式

    计算机——右键管理
    image-20201213134615290.png
    启动MySQL57服务
    image.png

    二、DOS 命令方式

    命令窗口输入:net start mysql
    image-20201213134709259.png

    MySQL登录

    图形化工具-navicat

    1、双击启动navicat软件
    image.png
    2、点击”连接”,起名——输入密码——确定
    image-20201213135904931.png
    3、建立好连接后,双击连接
    image-20201213140009344.png

    DOS命令方式

    登录格式1

    mysql -u用户名 -p密码
    先写密码
    image-20201213135308473.png
    后写密码
    image-20201213135338096.png

    登录格式2

    mysql -hip地址 -u用户名 -p密码
    image-20201213135459408.png

    登录格式3

    mysql --host=ip地址 --user=用户名 --password=密码
    image-20201213135653963.png

    退出MySQL

    quit 或 exit

    MySQL目录结构

    image-20201213140544655.png

    物理文件构成

    image-20201213141219462.png
    image-20201213141326700.png
    1.db.opt 对数据库进行默认设置,例如字符集。
    2.数据文件
    在MySQL 中每一个数据库都会在定义好(或者默认)的数据目录下
    存在一个以数据库名字命名的文件夹,用来存放该数据库中各种表数据文件 。
    3.日志文件 ib_logfile0,ib_logfile1
    4.临时表文件 ibtmp1
    5.“.frm”文件:
    与表相关的元数据(meta)信息都存放在“.frm”文件中,包括表结构的定义信息等。
    不论是什么存储引擎,每一个表都会有一个以表名命名的“.frm”文件。
    6.存储引擎文件
    6.1 “.MYD”文件
    “.MYD”文件是MyISAM 存储引擎专用,
    存放MyISAM 表的数据。
    每一个MyISAM表都会有一个“.MYD”文件与之对应,
    同样存放于所属数据库的文件夹下,和“.frm”文件在一起。
    6.2 “.MYI”文件
    “.MYI”文件也是专属于MyISAM 存储引擎的,
    主要存放MyISAM 表的索引相关信息。
    注意:MyISAM 存储引擎速度快,但是不支持事务。
    6.3“.ibd”文件和ibdata 文件
    这两种文件都是存放Innodb存储引擎 数据的文件,
    之所以有两种文件来存放Innodb的数据(包括索引),
    是因为Innodb 的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,
    还是独享表空间存放存储数据.
    注意:我们使用Innodb存储引擎,支持事务。

    MyISAM 与 Innodb 的区别:
    两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁。
    而MyISAM不支持。
    如果想要速度快,使用 MyISAM。
    想要用事务,使用Innodb

系统数据库

MySQL:核心数据库,存储用户的权限信息与帮助信息
Information-schema:虚拟数据库,没有单独的数据库文件,在select的时候,从其他数据库获取相应的信息。
performance_schema 数据库主要关注数据库运行过程中的性能相关的数据

总结

image-20201214121507498.png
1) 一个数据库服务器包含多个库
2) 一个数据库包含多张表
3) 一张表包含多条记录

三、数据库管理

navicat客户端操作

查看所有数据库

连接后可以看到有哪个数据库

使用某个数据库

双击一个数据名

新建数据库

在连接名上 右键 “新建数据库“
image-20201213143514704.png

utf8_general_ci 不区分大小写 utf8_bin 区分大小写

删除数据库

在数据库上右键 “删除数据库”

命令行操作

查看当前服务器上有哪些数据库

show {databases | schemas} [like'pattern'];
示例:

  1. show databases; -- 显示所有数据库
  2. show databases like 't%'; -- 查看名字以t开头的数据库
  3. -- 说明:%代表任意长度的字符,_代表一个字

查看当前数据库

select database();

设置当前数据库

use 数据库名

这个命令后面可以不加分号

示例:
use mysql

创建数据库

create {database | schema} [ifnotexists] 数据库名;
示例:

  1. create database aa; -- 创建 aa数据库
  2. create database if not exists aa; -- 如果不存在aa数据库,就创建 aa,否则,不创建

删除数据库

dropdatabase [ifexists] 数据库名;
示例:
drop database if exists aa; -- 如果存在aa数据库,就删除,否则 不删除

四、用户管理

navicat客户端操作

查看所有用户

image-20201213145841821.png

新建用户

用户——新建用户
image-20201213145935743.png

授权

注意:别忘了保存
服务器权限可以操作所有数据库
用户——选中用户——编辑用户——服务器权限——勾选权限——保存
image-20201213150013877.png
设置权限针对某个数据库
用户——选中用户——编辑用户——权限——勾选某个库——勾选权限——保存
image-20201213150144597.png

删除用户

用户——选中用户——删除用户
image-20201213150239661.png

命令行操作

查看所有用户

select * from mysql.user;
示例:
select host,name from mysql.user;

新建用户

createuser'用户名'[@'主机'] identified by '密码';

@’主机’ 不写,代表 %,任意主机都可以使用该用户进行连接

image-20201213150829907.png

授权

grant 权限 on 数据库名.表名 to 用户名;
示例:
给aa用户授予test数据库所有表增删改查的权限
image-20201213151047660.png

所有权限写all,所有数据库写,所有表写
收回权限的写法:revoke 权限 on 数据库名 .表名 from 用户;

删除用户

dropuser 用户名;
image-20201213151328557.png

总结

1.MySQL用户名中的%和localhost的含义

  • %代表任意主机
  • localhost代表本机

    2.mysql默认的端口号是多少?

  • 3306

    3.mysql安装支持的机器类型有哪些?

  • 开发者机器,服务器机器,专用mysql机器

    4.MySQL的默认用户是?

  • root