数据库一些基本的概念

一,什么是数据库(DataBase,简称DB)
很多数据存储在一个大仓库中
所谓数据库,就是所有的程序需要的数据都存储在一个仓库中
多个程序就在这个仓库中创建多个文件夹
在一个数据库当中,可能存在多个程序的数据,
它们分别存储在不同的文件夹中

二,数据库管理系统DataBase Management System 简称DBMS
负责了 程序的数据的增删改查 以及 权限控制等等的功能
mysql oracle
sqlserver sqllite
redis mangodb
三,DBA 数据库管理员
数据库的安装与配置 创建用户并分配权限 数据库的优化 帮助设计表结构
四,为什么要用数据库? 数据库的优势
      稳定性 :               这样任意一台服务所在的机器崩溃了都不会影响数据和另外的服务。
一致性 : 所有的数据都存储在一起,所有的程序操作的数据都是统一的,就不会出现数据不一致的现象
并发 : 数据库可以良好的支持并发,所有的程序操作数据库都是通过网络,而数据库本身支持并发的网络操作,不需要我们自己写socket
存取数据效率高 : 使用数据库对数据进行增删改查的效率要高出我们自己处理文件很多

五,数据库的分类
关系型数据库 mysql oracle sqlserver
非关系型数据库 redis mangodb hbase
       关系型数据库是非常节省空间,减少冗余数据,并且能够清晰的表达数据库与数据库之间关系的数据库管理工具,帮助我们能够存储复杂的数据结构
 
六,基础概念
        一条记录  -->  一行一行数据
        表 --> 文件
        库 --> 文件夹
        数据库 --> 存储数据的大的概念
        root用户是拥有最高权限的用户
        1、DDL语句     数据库定义语言: 数据库、表、索引、视图、存储过程,例如CREATE DROP ALTE
        2、DML语句    数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
        3、DCL语句     数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
 
七,什么是存储引擎?
             数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。
   通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

八,mysql支持哪些存储引擎?
   mysql5.6支持的存储引擎包括:
     InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、FEDERATED、MRG_MYISAM、ARCHIVE、PERFORMANCE_SCHEMA。
    其中NDB和InnoDB提供事务安全表,其他存储引擎都是非事务安全表。
      最常用  InnoDB、MyISAM
mysql 5.5 MyISAM 默认的存储引擎
mysql 5.6 InnoDB 默认的存储引擎
 
九,mysql中存储引擎决定的事情:
      行级锁 表级锁
支持事务 事务 让多条sql语句变成一个整体,要成功一起成功,如果其中有一条语句失败了,那么多有的状态都要回归到开始事务之前
外键 突出了表与表之间的联系
索引 书的目录 帮助我们加快查询速度
cache 把一部分数据放到内存中 十,常用存储引擎及适用场景
   1>  InnoDB :     支持事务 行级锁 聚集索引 支持外键      InnoDB 是一个事务安全的存储引擎,它具备提交、回滚以及崩溃恢复的功能以保护用户数据。
     InnoDB 的行级别锁定以及 Oracle 风格的一致性无锁读提升了它的多用户并发数以及性能。
             InnoDB 将用户数据存储在聚集索引中以减少基于主键的普通查询所带来的 I/O 开销。为了保证数据的完整性,InnoDB 还支持外键约束。
             InnoDB 用于事务处理应用程序,支持外键和行级锁。如果应用对事物的完整性有比较高的要求,在并发条件下要求数据的一致性,        数据操作除了插入和查询之外,还包括很多更新和删除操作,那么InnoDB存储引擎是比较合适的。
             InnoDB除了有效的降低由删除和更新导致的锁定,还可以确保事务的完整提交和回滚,对于类似计费系统或者财务系统等对数据准确要求性比较高的系统都是合适的选择。
       2> MyISAM:  不支持事务\行级锁\外键 非聚集索引 表级锁     MyISAM既不支持事务、也不支持外键、其优势是访问速度快,但是表级别的锁定限制了它在读写负载方面的性能,因此它经常应用于只读或者以读为主的数据场景。
         如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不高,那么可以选择这个存储引擎。
       3> Memory:  只能在内存中存储数据 速度快 但是断电消失             将所有的数据保存在内存中,在需要快速定位记录和其他类似数据的环境下,可以提供极快的访问。
             Memory的缺陷是对表的大小有限制,虽然数据库因为异常终止的话数据可以正常恢复,但是一旦数据库关闭,存储在内存中的数据都会丢失。
             在内存中存储所有数据,应用于对非关键数据由快速查找的场景。Memory类型的表访问数据非常快,因为它的数据是存放在内存中的,
             并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失
        4> BLACKHOLE :  不存储任何数据 只是有一个表结构  用于大数据量背景下做数据分流用的             黑洞存储引擎,类似于 Unix 的 /dev/null,Archive 只接收但却并不保存数据。对这种引擎的表的查询常常返回一个空集。
             这种表可以应用于 DML 语句需要发送到从服务器,但主服务器并不会保留这种数据的备份的主从配置中。
十一,mysql的工作流程

MySQL架构总共四层,在上图中以虚线作为划分。 

第一层: 首先,最上层的服务并不是MySQL独有的,大多数给予网络的客户端/服务器的工具或者服务都有类似的架构。比如:连接处理、授权认证、安全等。 
第二层: 第二层的架构包括大多数的MySQL的核心服务。包括:查询解析、分析、优化、缓存以及所有的内置函数(例如:日期、时间、数学和加密函数)。

同时,所有的跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。

第三层: 第三层包含了存储引擎。存储引擎负责MySQL中数据的存储和提取。服务器通过API和存储引擎进行通信。

这些接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明化。

存储引擎API包含十几个底层函数,用于执行“开始一个事务”等操作。但存储引擎一般不会去解析SQL(InnoDB会解析外键定义,因为其本身没有实现该功能),

不同存储引擎之间也不会相互通信,而只是简单的响应上层的服务器请求。

第四层: 第四层包含了文件系统,所有的表结构和数据以及用户操作的日志最终还是以文件的形式存储在硬盘上。

 

 
 


 
 
 
posted @ 2019-04-25 17:12  __Invoker  阅读(322)  评论(0编辑  收藏  举报