数据库

1. 什么是数据库

数据库是长期存储在计算机内、有组织的、可共享的数据集合。
这种数据集合具有以下特点: 尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改、查有统一软件进行管理和控制。从发展的历史看,数据库是数据管理的高级阶段,它是由文件管理系统发展起来的。
数据库中的数据是从全局的观点出发建立的, 按一定的数据模型进行组织、描述和存储。
其结构基于数据的自然联系,从而提供一切必要的存取路径, 且数据不再针对某一应用,而是面向全组织,具有整体的结构化特征。
从文件系统发展到数据库系统, 这在信息领域中具有里程碑意义。在文件系统阶段, 人们在信息处理中关注的中心问题是系统功能的设计,因此程序设计占据主导地位; 而在数据库方式下,数据开始占据中心位置,数据的结果设计成为信息系统首先关系的问题,而应用程序则以既定的数据结构为基础进行设计。

2. 关系模型结构

详细说明如下:

  1. 单一的数据结构—关系(表文件)
    关系数据库的表采用二维表格来存储数据,是一种按行与列排列的具有相关信息的逻辑组,类似于Excel工作表。一个数据库可以包含任意多个数据表。
    在用户看来,一个关系模型的逻辑结构是一张二维表,由行和列组成。这个二维表就叫关系,一个关系对应一张表。
    2) 元组(记录)----行。 表中的一行即为一个元组,或成为一条记录。
    3) 属性(字段)----列。 数据中的每一列成为一个字段,表是由其包含的各种字段定义的,每个字段描述了它所含有的数据的意义,数据表的设计实际上就是对字段的设计。
    创建数据表时,为每个字段分配一个数据类型,定义它们的数据长度和其他属性。
    字段可以包含各种字符、数字、甚至图形。
    4) 属性值----值。 行和列的交叉位置表示某个属性值。
    5) 主码。 也称为主键或主关键字, 是表中用于唯一确定一个元组的数据。
    关键字用来确保表中记录的唯一性,可以使一个字段或多个字段,常用作一个表的索引字段。
    6)域。 属性的取值范围。
    7) 关系模式。 关系的描述称为关系模式。 对关系的描述,一般表示为: 关系名(属性1、属性2…属性n). 例如: 课程(课程号、课程名称、学分、任课老师)。
    但是关系模型的这种简单的数据结构能够表达丰富的语义,描述出现实世界的实体及实体间的各种关系。

在现代IT界,SQL和XML 已经成为数据库的非常重要的组成部分。

3. 数据库软件在运行过程中以怎样的形式存在? 独立的进程,还是每个进程包含某个数据库so库文件?

Mysql.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。

SQLite, 是一款轻型的数据库,它包含在一个相对小的C库中。 SQLite引擎不是个程序与之通信的独立进程,而是链接到程序中成为它的一个主要部分。

4. SQL(Structured Query Language)语言 ----结构化查询语言

SQL:
是一种特殊目的的编程语言,
是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
是一种交互式查询语言,允许用户直接查询存储数据,但他不是完整的程序语言,但它可以嵌入到另一种语言中,也可以借用VB、C、java等语言,通过调用级接口(CALL LEVEL INTERFACE)直接发送到数据库管理系统。
是高级的非过程化编程语言, 允许用户在高层数据结构上工作。
它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统,可以使用相同的结构化查询语言作为数据输入与管理的接口。 结构化查询语句可以嵌套,这是他具有极大的灵活性和强大的功能。
SQL语言基本上独立于数据库本身,使用的机器、网络、操作系统,基于SQL的DMBS产品可以运行在个人机、工作站到基于局域网、小型机和大型机的各种计算机系统上,具有良好的可移植性。可以看出标准化工作是很有意义的。
数据库和各种产品都使用SQL作为共同的数据存取语言和标准的接口,是不同数据库系统之前的互操作有了共同的基础,进而实现各种机型、各种操作环境的共享和移植。

语句结构:
结构化查询语言包含6个部分:

  1. 数据查询语言(DQL: Data Query Language)
    其语句,也称为“数据检索语句”, 用以从表中获得数据,确定数据怎样在应用程序中给出。保留字SELECT是DQL用得最多的关键字, 其他常用保留字还有: WHERE、ORDER BY, GROUP BY 和 HAVING.

  2. 数据操作语言(DML: Data Manipulation Language)
    INSERT, UPDATE, DELETE, 分别用于添加、修改、删除表中的行。

  3. 事务处理语言(TPL):
    它的语句能确保被DML语句影响的表的所有行及时得到更新。
    BEGIN TRANSACTION, COMMIT, POLLBACK

  4. 数据控制语言(DCL):
    它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组队数据库对象的访问。

  5. 数据定义语言DDL
    CREAT, DROP. 在数据库中创建新表或删除表; 为表引入索引等。

  6. 指针控制语言CCL:
    DECLARE CURSOR, FETCH INTO 和UPDATE WHERE CURRENT 用于对一个或多个表单独行的操作。

5. MySQL 介绍

MySQL基本介绍
MySQL运行原理与基础架构细说
MySQL是一个开放源代码的关系数据库管理系统。
和其他数据库相比,MySQL的架构可以在多种不同场景中应用并发挥良好作用。 主要体现在存储引擎的架构上, 插件式的存储引擎架构将查询处理和其他的系统任务以及数据的存取项分离。 这种架构可以根据业务的需要选择合适的存储引擎。
MySQL逻辑架构
在这里插入图片描述
1, 最上层是一些客户端和连接服务, 包含本地socket通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。 主要完成一些类似于连接处理、授权认证及相关安全方案。 在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。
2. 第二层主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化部分内置函数的执行。 所有跨存储引擎的功能也在这一层实现,如:过程、函数等。 在该层,服务器会解析查询并创建相应的内部解析熟,并对其完成相应的优化,最后胜出相应的执行操作。 如果是hiselect语句,服务器还会查询内部的缓存,如果缓存空间足够大,能解决大量读操作的环境中很好的提示系统性能。
3. 存储引擎层,真正的负责了MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信。 不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。
4. 数据存储层,主要是将数据存储在运行与裸设备的文件系统之上,并完成与存储引擎的交互。

参考:MySQL查询过程
当向MySQL发送一个请求的时候:
在这里插入图片描述

6. SQLite

SQLite, 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。
它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用。 SQLite占用资源非常低,在嵌入式设备中,可能只需要几百K的内存就够了。 它能够支持Windows、Linux/Unix等主流的操作系统,同时能够跟很多程序语言结合,如JAVA\PHP等,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。

工作原理:
不像常见的客户-服务器范例, SQLite引擎不是个程序与之通信的独立进程,而是链接到程序中成为它的一个主要部分。 所以主要的通信协议是在编程语言内的直接API调用。 这在消耗总量、延迟时间和整体简单性上有积极的作用。 整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。 他的简单的设计是通过在开始一个事务的时候说的整个数据文件而完成的。

详细介绍
SQLite是一个开源的、内嵌式的关系型数据库。 SQLite和Oracle和Access一样是文件型数据库,就是说,一个数据库就是一个文件,此数据库里可以建立很多的表,可以建立索引、触发器等,但是它实际上得到的就是一个文件
SQLite数据库具有以下特点:
(1) 首先SQLite数据库服务器就在你的数据库应用程序中,好处是不需要网络配置和管理,也不需要通过设置数据源访问数据库服务器;
(2) 其次SQLite数据库的服务器和客户端运行在用一个进程中。 这样可以减少网络访问的消耗,简化数据库管理,是你的程序部署起来更容易。
(3) 再次,SQLite在处理数据类型是与其他的数据库不同。 区别在于它所支持的类型以及这些类型是如何存储、比较、强化和指派。

AQLite的域完整性被称为域亲和性,你必须先要理解存储类和弱类型。 SQLite有integer\Real、Text、Blob和Null 五个原始的数据类型,被称为存储类。存储类这个词表明了一个值在磁盘上存储的格式,其实就是类型或数据类型的同义词。

数据库SQLite的数据库架构:
在这里插入图片描述

  1. 接口: 由SQLite C API组成,不管是程序、脚本语言还是库文件,最终都是通过它与SQLite交互的。
  2. 编译器: 在编译器中,分词器和分析器对SQL进行语法检查,然后把它转化成底层能更方便处理的分层的数据结构----语法树,然后把语法树传给代码生成器进行处理。而代码生成器根据它生成一种针对SQLite的汇编代码,最后由虚拟机执行。
  3. 虚拟机: 架构中最核心的部分是虚拟机,或叫做虚拟数据库引擎。 它和Java虚拟机相似,解释执行字节代码。 VDBE的字节代码有128个操作码(opcodes)构成,他们主要集中在数据库操作。 它的每一条指令都用来完成特定的数据库操作或者为这些操作栈空间的准备。
  4. 后端: 后端有B-tree,页缓存和操作系统接口(即系统调用)构成。B-tree和page cache共同对数据进行管理。 B-tree主要功能是索引,它维护这各个页面之间的负责关系,便于快速找到所需数据。而pager的主要作用是通过OS接口在B-tree和Disk间传递页面。

嵌入式数据库SQLite的数据类型
在SQLite数据库中,不仅提供了存储基本数据的功能,而且还提供了对二机制数据存储的能力,这样可以确保把采集到的图形信息存放到数据库中,由数据库统一操作和管理,在SQLite数据库中提供的接班数据类型不但可以进行转化,还可以进行大小比较。数据类型如下:
(1) Inger 整数值。 有正负之分,它是由8个字节(Bytes)表示。SQLite数据库可以根据整数值的大小自动控制其所占字节的个数。
(2) Real实数类型,8字节表示
(3) Text文本字符数据类型。 用来保存文本信息。 字符串大小没有限制,可支持多种字符编码类型。
(4) Blob, 二进制数据类型。保存二机制数据,大小没有限制
(5) Null空类型。一个具有NULL数据类型的值比所有其他类型值都小。 SQLite数据库对Null完全支持。
SQLite本身一共有80多个API调用接口,功能建的数据库程序用3个接口完成:
sqlite3_open(),sqlite3_exec(), sqlite3_close().

数据库控制和语句执行方式
从数据库打开开始,SQLite就要为sqlite3*类型准备好内存,一直到数据库关闭整个过程。打开数据库时, 这个类型的变量指向你将操作的数据库。 SQLite数据库和大多数据库操作相同,其过程为:
连接并打开数据库 --> 处理事务 --> 断开连接并关闭数据库

  1. 连接并打开数据库
    每个SQLite数据库都存储在单独的操作系统文件中,数据库与文件意义对应。 连接并打开数据库的接口调用为sqlite_open(), 它用来打开一个数据库文件,该数据库文件中可以包含许多个关系表。 调用成功后返回:SQLITE_OK每个SQLite数据库都存储在单独的操作系统文件中,数据库与文件意义对应。 连接并打开数据库的接口调用为sqlite_open(), 它用来打开一个数据库文件,该数据库文件中可以包含许多个关系表。 调用成功后返回:SQLITE_OK
  2. 处理事务
    默认情况下,事务自动提交,即每一个SQL语句都在一个独立的事务下运行。 任何SQL语句命令都在事务下执行。 可以通过Begin、Commit和Rollback等命令手动提交事务。
    示例:
int result;
开始  result = sqlite3_exec(db, "begin transaction", 0, 0, &zErrMsg);
提交  result = sqlite3_exec(db, "commit transcation",  0, 0, &zErrMsg);
回滚  result = sqlite3_exec(db, "rollback transaction",  0, 0, &zErrMsg);
  1. 数据库SQL语句执行
    在SQLite中执行事务最常用的接口是sqlite3_exec(), 在这个函数中有指向sqlite3_exec()的回调函数的指针参数。 例如:做insert操作或delete操作时,就没必要使用回调,该函数指针可以为NULL。而当你做select时,就要使用该回调函数,因为sqlite3把数据查出来,得公国回调告诉你查出了什么数据。
    回调函数的形式为:
typedef int(*sqlite3_callback)(void*, int, char**, char**).
  1. 执行SQL语句。 SQL语句的执行过程由三个阶段完成。
  2. 格式化SQL语句。 sqlite_mprintf()或sqlite3_vprintf()格式化SQL语句,然后才调用sqlite3_exec()执行语句,最好调用sqlite3_free()释放内存资源。
  3. 断开连接并关闭数据库: sqlite3_close()

7. android使用数据库体系架构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值