在我们这可大数据时代我们应该关注一下数据库,数据库就是以一定格式进行组织的数据的集合,通俗来看数据库就是用户计算机上一些具有特殊格式的数据文件的集合。接下来了我们看看框架。
在这个大数据时代 ,数据库到底能干什么,简单的来说吧,就拿我们购物说,我们看下面的图
就我们在百度上看到的这样的内容,后端数据库可能是这样的
这么一来我们生活在大数据时代是没错了,就一个小小的网页都会有后端大量数据支持,可以这样说生活一切皆数据。
那问题来了,数据库本身就是一种文件,那用户可以不使用数据库而使用普通文件来进行数据的存储吗?
从理论上是可以的,但是相比于普通文件,数据有好多特点:
1.持久储存
2.读写速度快
3.保证数据的有效性
4.对程序支持性非常好,容易扩展
1.关系数据库:
关系数据库是指采用了关系模型来组织数据的数据库,简单来说,关系模型指的就是二维表格模型,二一个关系型数据库就是由二维表及其之间关系所组成的一个数组组织
二维表如下:
常见的关系型数据库有MySQL,ORACLE,SQLite,SQLServer,其中MySQL为开源数据库。
2.非关系型数据库
非关系型数据库,又被称为NoSQL(Not Only SQL),意为不仅仅是SQL,对NoSQL最为普遍的定义就是“非关联型的”,强调Key-Value的方式储存。除了NoSQL是非关系型的数据库,还有MongoDB和redis都是非关系型数据库 。
说了这么多我们还不知道数据库是如何管理数据的,数据库管理系统是为管理数据库而设计的软件系统,包括三大部分构成:
1,数据库文件集合.主要是一系列的数据文件,作用是储存数据。
2,数据库服务端.主要负责对数据文件以及文件中的数据进行管理。
3,数据库客户端.主要负责和服务端通信,向服务端传输数据或者从服务端获取数据。
他们之间的关系:
数据库指的是一些数据的集合,数据库管理系统是操作系统和数据库应用系统之间的数据管理软件,
数据库客户端通过“特殊的语言”告诉服务端,客户端想要做什么。
服务端和数据文件一般都在同一台机器上,直接可以读写数据文件。
在这里的特殊语言就是SQL语句,
数据库管理系统的特点:
1.结构化:数据库系统实现了整体数据的结构化,这是数据库的最主要的特征之一。这里所说的“整体”结构化,是指在数据库中的数据不再仅针对某个应用,而是面向全组织;不仅数据内部是结构化,而且整体式结构化,数据之间有联系。
2.共享化:因为数据是面向整体的,所以数据可以被多个用户、多个应用程序共享使用,可以大大减少数据冗余,节约存储空间,避免数据之间的不相容性与不一致性。
3.独立性:数据独立性包括数据的物理独立性和逻辑独立性。
SQL语句的作用是实现数据库客户端和服务端之间的通信。SQL是结构化查询语句,是一种用来操作RDBNS的数据库语言,当前几乎所有关系型数据库都支持使用SQL语句进行操作。
SQL语句主要分为:
DQL:数据查询语言,用于对数据进行查询,如select
DML:数据操作语言,对数据进行增加、修改、删除,如:insert,udpate,delete
TPL: 事务处理语言,对事务进行处理,包括begin transaction、commit、rollback
DCL:数据控制语言,进行授权与权限回收,如grant、revoke
DDL:数据定义语言,进行数据库、表的管理等,如create、drop
DECLARE --为查询设定游标
EXPLAN --为查询描述数据访问计划
OPEN --检索查询结果打开一个游标
FETCH --检索一行查询结果
CLOSE --关闭游标
PREPARE --为动态执行准备SQL 语句
EXECUTE --动态地执行SQL 语句
DESCRIBE --描述准备好的查询
SELECT–查询数据
SELECT --从数据库表中检索数据行和列
INSERT --向数据库表添加新数据行
DELETE --从数据库表中删除数据行
UPDATE --更新数据库表中的数据
COMMIT --结束当前事务
ROLLBACK --回滚当前事务
SET TRANSACTION --定义当前事务数据访问特征
这里多次提到事务,那我们接下来就了解了解数据库事务
一,什么是数据库事务
数据库事务:是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。
二,数据库事务的性质
1.原子性:事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。
2.一致性:几个并行执行的事务,其执行结果必须与按某一顺序 串行执行的结果相一致。
3.争隔离性:事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
4.争持性:对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。
三,数据库事务的作用
一个数据库事务通常包含了一个序列的对数据库的读/写操作。它的存在包含有以下两个目的:
1.为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
2.当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。
当事务被提交给了DBMS(数据库管理系统),则DBMS(数据库管理系统)需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前的状态;同时,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行。
但在现实情况下,失败的风险很高。在一个数据库事务的执行过程中,有可能会遇上事务操作失败、数据库系统/操作系统失败,甚至是存储介质失败等情况。这便需要DBMS对一个执行失败的事务执行恢复操作,将其数据库状态恢复到一致状态(数据的一致性得到保证的状态)。为了实现将数据库状态恢复到一致状态的功能,DBMS通常需要维护事务日志以追踪事务中所有影响数据库数据的操作。
四,数据库事务模型
1.显示事务:对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。
2.隐式事务:隐式事务是指每一条数据操作语句都自动地成为一个事务,事务的开始是隐式的,事务的结束有明确的标记。即当用户进行数据操作时,系统自动开启一个事务,事务的结束则需手动调用 commit或 rollback语句来结束当前事务,在当前事务结束后又自动开启一个新事务。
3.自动事务:自动事务是指能够自动开启事务并且能够自动结束事务。在事务执行过程中,如果没有出现异常,事务则自动提交;当执行过程产生错误时,则事务自动回滚。
五,数据库事务优点
1.把逻辑相关的操作分成了一个组;
2.在数据永久改变前,可以预览数据变化;
3.能够保证数据的读一致性。
GRANT --授予用户访问权限
DENY --拒绝用户访问
REVOKE --解除用户访问权限
CREATE TABLE --创建一个数据库表
DROP TABLE --从数据库中删除表
ALTER TABLE --修改数据库表结构
CREATE VIEW --创建一个视图
DROP VIEW --从数据库中删除视图
CREATE INDEX --为数据库表创建一个索引
DROP INDEX --从数据库中删除索引
CREATE PROCEDURE --创建一个存储过程
DROP PROCEDURE --从数据库中删除存储过程
CREATE TRIGGER --创建一个触发器
DROP TRIGGER --从数据库中删除触发器
CREATE SCHEMA --向数据库添加一个新模式
DROP SCHEMA --从数据库中删除一个模式
CREATE DOMAIN --创建一个数据值域
ALTER DOMAIN --改变域定义
DROP DOMAIN --从数据库中删除一个域
这里多次提到索引,那我们接下来就了解了解数据库索引
一,数据库索引是什么
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。索引的一个主要目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。
二,主要数据库索引种类
1.唯一索引:唯一索引是不允许其中任何两行具有相同索引值的索引。当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。
2.主键索引:数据库表经常有一列或多列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。
3.聚集索引:在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。聚集索引和非聚集索引的区别,如字典默认按字母顺序排序,读者如知道某个字的读音可根据字母顺序快速定位。
4.索引列:可以基于数据库表中的单列或多列创建索引。多列索引可以区分其中一列可能有相同值的行。如果经常同时搜索两列或多列或按两列或多列排序时,索引也很有帮助。
一,储存引擎是什么
MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。
二,储存引擎的分类
MyISAM: 拥有较高的插入,查询速度,但不支持事务
InnoDB :5.5版本后Mysql的默认数据库,事务型数据库的首选引擎,支持ACID事务,支持行级锁定
BDB: 源自Berkeley DB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性
Memory :所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失
Merge :将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用
Archive :非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入速度,但其对查询的支持相对较差
Federated: 将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用
Cluster/NDB :高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用
CSV: 逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。
BlackHole :黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继