01 数据库和MySQL简介
Posted teayear
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01 数据库和MySQL简介相关的知识,希望对你有一定的参考价值。
01 数据库和mysql简介
文章目录
思考打地鼠,排名?
最开始,我们只是统计当前用户得分,每成功一次,得1分。浏览器关闭,再次打开,得分情况没有了。注意,这种情况下,得分记录保存在哪里???内存,内存特征就是临时存储数据。如果有排名,可以使用数组、对象类型的数组来存放排名,仍然是关闭浏览器重启,数据没有保存。
解决方案之一:存放到文件上,paiming.data,下次浏览器打开,读取这个文件,是不是排名就有记录。这个时候,需要我们使用文件的读取、写入操作。<思路>
什么是数据库(database)
你可能还没有意识到,其实你自己一直在使用数据库。每当你从自己手机的联系人簿里查找名字时,你就在使用数据库。如果你在某个搜索引擎上进行搜索,也是在使用数据库。如果你在工作中登录网络,也需要依靠数据库验证自己的名字和密码。即使是在自动取款机上使用ATM卡,也要利用数据库进行PIN码验证和余额检查。
数据库这个术语的用法很多,但是对于程序开发人员而言,数据库是一个以某种有组织的方式存储的数据集合。
确切地说,数据库软件应称为DBMS(数据库管理系统)
为什么要有数据库?
没有数据库时的烦恼
管理方式
使用电子表格 Excel 进行各种数据的更新和管理
产生的问题
-
各个部门的数据重复,浪费资源
-
部门之间的数据不能共享
-
无法及时更新,比如苹果的价格有变动,需要由负责人进行所有部门通知~~
-
因为无法及时更新,还会造成部门之间的数据不统一
-
无法扩展,适应新的业务需求
-
…
数据库
1.数据库就是“数据”的“仓库”
2.数据库中包含表、关系以及操作对象
3.数据存放在表中
常见的关系型数据库
中国邮政储蓄银行公布了一项Oracle数据库采购计划,采购金额高达1.45亿元。发标方,竞标方只有一家,就是Oracle。六月初发布成交公告,甲骨文(中国)软件系统有限公司中标,采购的内容为:Oracle数据库软件四年期原厂标准服务。
关系型数据库国内常用的有:
- Oracle
- MySQL
- MS SQLServer
- PostgreSQL
- DB2
下面是数据库排行榜的前10名,来源 DB-Engines 2020年4月份。
什么是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 |
每一行都是由数量不等的列组成的。我们将一个列称为一个「字段」,行:记录。
简单来说:
- 水平为行
- 垂直为列
4. 数据类型
数据类型就是在列中允许写的数据种类。
数据类型的作用:
- 限制输入的内容,防止数据格式输入错误
- 还帮助正确地排序数据,并在优化磁盘使用方面起重要的作用。
因此,在创建表时必须对数据类型给予特别的关注
4. 主键(primary key)
表中每一行都应该有可以唯一标识自己的一列(或一组列) 。一个顾客表可以使用顾客编号列,而订单表可以使用订单ID,雇员表可以使用雇员ID或雇员社会保险号。我们将主键作为一张表中所有行数据的唯一标识符。
所以说主键在一张表中是独一无二的。
5.数据库设计
MySQL 简介
MySQL 是数据库软件(DBMS)的一种,属于关系型数据库。现在被Oracle公司收购。
为什么选择MySQL?
从公司运营角度来说,选择MySQL有多种原因,主要就是Oracle太贵,MySQL一开始并不是功能强大的数据库,但随着阿里巴巴将数据从Oracle数据库迁移到MySQL后,国内的社区和互联网公司就迅速开始对MySQL的应用和技术升级。到现在为止,国内公司使用MySQL主要从数据安全,稳定,技术服务,以及非常重要的价格上综合考虑成本问题,最终大多选择了MySQL。
从技术角度来看,MySQL 由于开源,可以带来两大优势:
- 可以更加了解软件运作的原理,更好的设置MySQL。一旦出了故障也可以准确定位。
- 可以更容易开发周边产品。
所以MySQL对于初创公司、互联网公司和很多传统行业不管从功能还是性能,又或者从成本角度考虑都是一个很好的选择。
数据库引擎
数据库引擎是用于存储、处理和保护数据的核心服务 。MySQL的数据库引擎非常多,使用 SHOW ENGINES
就可以查看当前的数据库引擎信息。
SHOW ENGINES; --查看MySQL的数据库引擎
数据库引擎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的,这个具体情况可以自己斟酌。
以上是关于01 数据库和MySQL简介的主要内容,如果未能解决你的问题,请参考以下文章