01 数据库和MySQL简介

文章目录

  • 01 数据库和MySQL简介
  • 什么是数据库(database)
  • 为什么要有数据库?
  • 没有数据库时的烦恼
  • 管理方式
  • 产生的问题
  • 数据库
  • 常见的关系型数据库
  • 什么是SQL
  • 关系型数据库基本概念
  • 1. 库
  • 2. 表
  • 3. 行与列
  • 4. 数据类型
  • 4. 主键(primary key)
  • 5.数据库设计
  • MySQL 简介
  • 数据库引擎
  • 数据库引擎InnoDB与MyISAM
  • 1、 存储结构
  • 2、 存储空间
  • 3、 可移植性、备份及恢复
  • 4、 事务支持
  • 5、 AUTO_INCREMENT
  • 6、 表锁差异
  • 7、 全文索引
  • 8、 表主键
  • 9、 表的具体行数
  • 10、 CURD操作
  • 11、 外键
  • 11、 外键


思考打地鼠,排名?

最开始,我们只是统计当前用户得分,每成功一次,得1分。浏览器关闭,再次打开,得分情况没有了。注意,这种情况下,得分记录保存在哪里???内存,内存特征就是临时存储数据。如果有排名,可以使用数组、对象类型的数组来存放排名,仍然是关闭浏览器重启,数据没有保存。

解决方案之一:存放到文件上,paiming.data,下次浏览器打开,读取这个文件,是不是排名就有记录。这个时候,需要我们使用文件的读取、写入操作。<思路>

01 数据库和MySQL简介_数据

什么是数据库(database)

你可能还没有意识到,其实你自己一直在使用数据库。每当你从自己手机的联系人簿里查找名字时,你就在使用数据库。如果你在某个搜索引擎上进行搜索,也是在使用数据库。如果你在工作中登录网络,也需要依靠数据库验证自己的名字和密码。即使是在自动取款机上使用ATM卡,也要利用数据库进行PIN码验证和余额检查。

数据库这个术语的用法很多,但是对于程序开发人员而言,数据库是一个以某种有组织的方式存储的数据集合。

确切地说,数据库软件应称为DBMS(数据库管理系统)

为什么要有数据库?

没有数据库时的烦恼

管理方式

使用电子表格 Excel 进行各种数据的更新和管理

01 数据库和MySQL简介_MySQL_02

产生的问题

  1. 各个部门的数据重复,浪费资源
  2. 部门之间的数据不能共享
  3. 无法及时更新,比如苹果的价格有变动,需要由负责人进行所有部门通知~~
  4. 因为无法及时更新,还会造成部门之间的数据不统一
  5. 无法扩展,适应新的业务需求

数据库

1.数据库就是“数据”的“仓库”
2.数据库中包含表、关系以及操作对象
3.数据存放在表中

01 数据库和MySQL简介_java_03

常见的关系型数据库

01 数据库和MySQL简介_数据_04

中国邮政储蓄银行公布了一项Oracle数据库采购计划,采购金额高达1.45亿元。发标方,竞标方只有一家,就是Oracle。六月初发布成交公告,甲骨文(中国)软件系统有限公司中标,采购的内容为:Oracle数据库软件四年期原厂标准服务。

关系型数据库国内常用的有:

  1. Oracle
  2. MySQL
  3. MS SQLServer
  4. PostgreSQL
  5. DB2

下面是数据库排行榜的前10名,来源 DB-Engines 2020年4月份。

01 数据库和MySQL简介_数据库_05

什么是SQL

SQL (发音为字母S-Q-L或sequel) 是结构化查询语言 (Structured Query Language)的缩写。SQL是一种专门用来与数据库通信的语言。

关系型数据库基本概念

关系型数据库特征:行、列存储数据,行表示一条记录、实体信息,列表示这条记录、实体信息的单一属性。

以及记录与记录之间的联系。比如说:同学的信息、班级的信息,联系是同学隶属于班级。

非关系型数据库:文档数据库、键值对数据库等,除了关系型数据库这种以行、列存储格式之外的数据库,都归纳到非关系型数据库里。

1. 库

理解数据库的一种最简单的办法是将其想象为一个文件柜。此文件柜是一个存放数据的物理位置,不管数据是什么以及如何组织的。也就是说数据库其实就是存储数据的仓库

库可以理解为存储数据最大的分类,一般在项目开发过程中会根据项目创建对应的库(一个项目创建一个库)。

房子:房子商:来一块地,盖楼。

2. 表

将资料放入自己的文件柜时,并不是随便将它们扔进某个抽屉就完事了,而是在文件柜中创建文件,然后将相关的资料放入特定的文件中。在数据库中这种文件称为表,用于存储各种数据

表就是在库中继续进行的分类,一般在开发过程中会根据模块或需求创建对应的表

楼的单元、房间

3. 行与列

表从表格来演化过来,这个表是比excel的表格,更为严谨的,只用来存放数据,不做鼠标、字体放大操作。

数据库的行和列其实和二维的电子表格一模一样。横着的是行,在一行中所有竖着的就是列。

编号

姓名

地址

销售代码

11

迪丽热

海淀黄庄菜园子

AC091

12

易烊千玺

易烊千玺

AC043

15

张无忌

中关村大街3-201

AC011

13

蔡徐坤

海淀龙王庙树林

AC041

14

赵可

海淀龙王庙树林

AC012

15

张无忌

中关村大街2-101

AC011

每一行都是由数量不等的列组成的。我们将一个列称为一个「字段」,行:记录

简单来说:

  1. 水平为行
  2. 垂直为列

01 数据库和MySQL简介_数据库_06

4. 数据类型

数据类型就是在列中允许写的数据种类。

数据类型的作用:

  1. 限制输入的内容,防止数据格式输入错误
  2. 还帮助正确地排序数据,并在优化磁盘使用方面起重要的作用。

因此,在创建表时必须对数据类型给予特别的关注

4. 主键(primary key)

表中每一行都应该有可以唯一标识自己的一列(或一组列) 。一个顾客表可以使用顾客编号列,而订单表可以使用订单ID,雇员表可以使用雇员ID或雇员社会保险号。我们将主键作为一张表中所有行数据的唯一标识符

所以说主键在一张表中是独一无二的。

5.数据库设计

01 数据库和MySQL简介_java_07

MySQL 简介

MySQL 是数据库软件(DBMS)的一种,属于关系型数据库。现在被Oracle公司收购。

为什么选择MySQL?

从公司运营角度来说,选择MySQL有多种原因,主要就是Oracle太贵,MySQL一开始并不是功能强大的数据库,但随着阿里巴巴将数据从Oracle数据库迁移到MySQL后,国内的社区和互联网公司就迅速开始对MySQL的应用和技术升级。到现在为止,国内公司使用MySQL主要从数据安全,稳定,技术服务,以及非常重要的价格上综合考虑成本问题,最终大多选择了MySQL。

从技术角度来看,MySQL 由于开源,可以带来两大优势:

  1. 可以更加了解软件运作的原理,更好的设置MySQL。一旦出了故障也可以准确定位。
  2. 可以更容易开发周边产品。

所以MySQL对于初创公司、互联网公司和很多传统行业不管从功能还是性能,又或者从成本角度考虑都是一个很好的选择。

数据库引擎

数据库引擎是用于存储、处理和保护数据的核心服务 。MySQL的数据库引擎非常多,使用 SHOW ENGINES 就可以查看当前的数据库引擎信息。

SHOW ENGINES; --查看MySQL的数据库引擎

01 数据库和MySQL简介_数据库_08

数据库引擎InnoDB与MyISAM

虽然数据库引擎非常多,但是现在MySQL默认使用的引擎是 InnoDB,在5.5之前的版本默认的引擎为MyISAM。所以就以这两款引擎做一点对比:

1、 存储结构

MyISAM:每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。
InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。

2、 存储空间

MyISAM:可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。
InnoDB:需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。

3、 可移植性、备份及恢复

MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。
InnoDB:免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了。

4、 事务支持

MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。
InnoDB:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。

5、 AUTO_INCREMENT

MyISAM:可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。
InnoDB:InnoDB中必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。

6、 表锁差异

MyISAM:只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。
InnoDB:支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。

7、 全文索引

MyISAM:支持 FULLTEXT类型的全文索引
InnoDB:不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。

8、 表主键

MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。
InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。

9、 表的具体行数

MyISAM:保存有表的总行数,如果select count() from table;会直接取出出该值。
InnoDB:没有保存表的总行数,如果使用select count(
) from table;就会遍历整个表,消耗相当大,但是在加了wehre条件后,myisam和innodb处理的方式都一样。

10、 CURD操作

MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。
InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。DELETE 从性能上InnoDB更优,但DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除,在innodb上如果要清空保存有大量数据的表,最好使用truncate table这个命令。

11、 外键

MyISAM:不支持
InnoDB:支持

SAM:如果执行大量的SELECT,MyISAM是更好的选择。
InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。DELETE 从性能上InnoDB更优,但DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除,在innodb上如果要清空保存有大量数据的表,最好使用truncate table这个命令。

11、 外键

MyISAM:不支持
InnoDB:支持

通过上述的分析,基本上可以考虑使用InnoDB来替代MyISAM引擎了,原因是InnoDB自身很多良好的特点,比如事务支持、存储 过程、视图、行级锁定等等,在并发很多的情况下,相信InnoDB的表现肯定要比MyISAM强很多。另外,任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。如果不是很复杂的Web应用,非关键应用,还是可以继续考虑MyISAM的,这个具体情况可以自己斟酌。