数据库工作原理 数据库原理需要什么基础
老铁们,大家好,相信还有很多朋友对于数据库工作原理和数据库原理需要什么基础的相关问题不太懂,没关系,今天就由我来为大家分享分享数据库工作原理以及数据库原理需要什么基础的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
什么是Web数据库,其基本工作原理是什么
数据库(database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式
数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用
从一条select语句看Oracle数据库查询工作原理
假如我们现在利用Select语句从数据库查询数据 Oracle数据库是如何运作的呢?从中我们可以领悟到什么呢?下面就结合一条简单的select语句看看Oracle数据库后台的运作机制这对于我们之后的系统管理与故障排除非常有帮助
第一步客户端把语句发给服务器端执行
当我们在客户端执行select语句时客户端会把这条SQL语句发送给服务器端让服务器端的进程来处理这语句也就是说 Oracle客户端是不会做任何的操作他的主要任务就是把客户端产生的一些SQL语句发送给服务器端虽然在客户端也有一个数据库进程但是这个进程的作用跟服务器上的进程作用事不相同的服务器上的数据库进程才会对SQL语句进行相关的处理不过有个问题需要说明就是客户端的进程跟服务器的进程是一一对应的也就是说在客户端连接上服务器后在客户端与服务器端都会形成一个进程客户端上的我们叫做客户端进程;而服务器上的我们叫做服务器进程所以由于所有的SQL语句都是服务器进程执行的所以有些人把服务器进程形象地比喻成客户端进程的影子
第二步语句解析
当客户端把SQL语句传送到服务器后服务器进程会对该语句进行解析同理这个解析的工作也是在服务器端所进行的虽然这只是一个解析的动作但是其会做很多小动作
查询高速缓存服务器进程在接到客户端传送过来的SQL语句时不会直接去数据库查询而是会先在数据库的高速缓存中去查找是否存在相同语句的执行计划如果在数据高速缓存中刚好有其他人使用这个查询语句的话则服务器进程就会直接执行这个SQL语句省去后续的工作所以采用高速数据缓存的话可以提高SQL语句的查询效率一方面是从内存中读取数据要比从硬盘中的数据文件中读取数据效率要高另一方面也是因为这个语句解析的原因
不过这里要注意一点这个数据缓存跟有些客户端软件的数据缓存是两码事有些客户端软件为了提高查询效率会在应用软件的客户端设置数据缓存由于这些数据缓存的存在可以提高客户端应用软件的查询效率但是若其他人在服务器进行了相关的修改由于应用软件数据缓存的存在导致修改的数据不能及时反映到客户端上从这也可以看出应用软件的数据缓存跟数据库服务器的高速数据缓存不是一码事
语句合法性检查
当在高速缓存中找不到对应的SQL语句时则数据库服务器进程就会开始检查这条语句的合法性这里主要是对SQL语句的语法进行检查看看其是否合乎语法规则如果服务器进程认为这条SQL语句不符合语法规则的时候就会把这个错误信息反馈给客户端在这个语法检查的过程中不会对SQL语句中所包含的表名列名等等进行SQL他只是语法上的检查
语言含义检查
若SQL语句符合语法上的定义的话则服务器进程接下去会对语句中的字段表等内容进行检查看看这些字段表是否在数据库中如果表名与列名不准确的话则数据库会就会反馈错误信息给客户端
所以有时候我们写select语句的时候若语法与表名或者列名同时写错的话则系统是先提示说语法错误等到语法完全正确后再提示说列名或表名错误若能够掌握这个顺序的话则在应用程序排错的时候可以节省时间
获得对象解析锁
当语法语义都正确后系统就会对我们需要查询的对象加锁这主要是为了保障数据的一致性防止我们在查询的过程中其他用户对这个对象的结构发生改变对于加锁的原理与方法我在其他文章中已经有专门叙述在这里就略过不谈了
数据访问权限的核对
当语法语义通过检查之后客户端还不一定能够取得数据服务器进程还会检查你所连接的用户是否有这个数据访问的权限若你连接上服务器的用户不具有数据访问权限的话则客户端就不能够取得这些数据故有时候我们查询数据的时候辛辛苦苦地把SQL语句写好编译通过但是最后系统返回个没有权限访问数据的错误信息让我们气半死这在前端应用软件开发调试的过程中可能会碰到所以要注意这个问题数据库服务器进程先检查语法与语义然后才会检查访问权限
确定最佳执行计划
当语句与语法都没有问题权限也匹配的话服务器进程还是不会直接对数据库文件进行查询服务器进程会根据一定的规则对这条语句进行优化不过要注意这个优化是有限的一般在应用软件开发的过程中需要对数据库的sql语言进行优化这个优化的作用要大大地大于服务器进程的自我优化所以一般在应用软件开发的时候数据库的优化是少不了的
当服务器进程的优化器确定这条查询语句的最佳执行计划后就会将这条SQL语句与执行计划保存到数据高速缓存如此的话等以后还有这个查询时就会省略以上的语法语义与权限检查的步骤而直接执行SQL语句提高SQL语句处理效率
第三步语句执行
语句解析只是对SQL语句的语法进行解析以确保服务器能够知道这条语句到底表达的是什么意思等到语句解析完成之后数据库服务器进程才会真正的执行这条SQL语句
这个语句执行也分两种情况一是若被选择行所在的数据块已经被读取到数据缓冲区的话则服务器进程会直接把这个数据传递给客户端而不是从数据库文件中去查询数据若数据不在缓冲区中则服务器进程将从数据库文件中查询相关数据并把这些数据放入到数据缓冲区中
这里仍然要注意一点就是Oracle数据库中定义了很多种类的高速缓存像上面所说的SQL语句缓存与现在讲的数据缓存我们在学习数据库的时候需要对这些缓存有一个清晰的认识并了解各个种类缓存的作用这对于我们后续数据库维护与数据库优化是非常有用的
第四步提取数据
当语句执行完成之后查询到的数据还是在服务器进程中还没有被传送到客户端的用户进程所以在服务器端的进程中有一个专门负责数据提取的一段代码他的作用就是把查询到的数据结果返回给用户端进程从而完成整个查询动作
从这整个查询处理过程中我们在数据库开发或者应用软件开发过程中需要注意以下几点
一是要了解数据库缓存跟应用软件缓存是两码事情数据库缓存只有在数据库服务器端才存在在客户端是不存在的只有如此才能够保证数据库缓存中的内容跟数据库文件的内容一致才能够根据相关的规则防止数据脏读错读的发生而应用软件所涉及的数据缓存由于跟数据库缓存不是一码事情所以应用软件的数据缓存虽然可以提高数据的查询效率但是却打破了数据一致性的要求有时候会发生脏读错读等情况的发生所以有时候在应用软件上有专门一个功能用来在必要的时候清除数据缓存不过这个数据缓存的清除也只是清除本机上的数据缓存或者说只是清除这个应用程序的数据缓存而不会清除数据库的数据缓存
lishixinzhi/Article/program/Oracle/201311/17595
数据库完整性的原理
数据库完整性对于数据库应用系统非常关键,其作用主要体现在以下几个方面:
1.数据库完整性约束能够防止合法用户使用数据库时向数据库中添加不合语义的数据。
2.利用基于DBMS的完整性控制机制来实现业务规则,易于定义,容易理解,而且可以降低应用程序的复杂性,提高应用程序的运行效率。同时,基于DBMS的完整性控制机制是集中管理的,因此比应用程序更容易实现数据库的完整性。
3.合理的数据库完整性设计,能够同时兼顾数据库的完整性和系统的效能。比如装载大量数据时,只要在装载之前临时使基于DBMS的数据库完整性约束失效,此后再使其生效,就能保证既不影响数据装载的效率又能保证数据库的完整性。
4.在应用软件的功能测试中,完善的数据库完整性有助于尽早发现应用软件的错误。
数据库完整性约束可分为6类:列级静态约束、元组级静态约束、关系级静态约束、列级动态约束、元组级动态约束、关系级动态约束。动态约束通常由应用软件来实现。不同DBMS支持的数据库完整性基本相同。关系数据库的完整性规则是数据库设计的重要内容。绝大部分关系型数据库管理系统RDBMS都可自动支持关系完整性规则,只要用户在定义(建立)表的结构时,注意选定主键、外键及其参照表,RDBMS可自动实现其完整性约束条件。
(1)实体完整性(Entity Integrity)。实体完整性指表中行的完整性。主要用于保证操作的数据(记录)非空、唯一且不重复。即实体完整性要求每个关系(表)有且仅有一个主键,每一个主键值必须唯一,而且不允许为“空”(NULL)或重复。
(2)实体完整性规则要求。若属性A是基本关系R的主属性,则属性A不能取空值,即主属性不可为空值。其中的空值(NULL)不是0,也不是空隔或空字符串,而是没有值。实际上,空值是指暂时“没有存放的值”、“不知道”或“无意义”的值。由于主键是实体数据(记录)的惟一标识,若主属性取空值,关系中就会存在不可标识(区分)的实体数据(记录),这与实体的定义矛盾,而对于非主属性可以取空值(NULL),因此,将此规则称为实体完整性规则。如学籍关系(表)中主属性“学号”(列)中不能有空值,否则无法操作调用学籍表中的数据(记录)。参照完整性(Referential Integrity)属于表间规则。对于永久关系的相关表,在更新、插入或删除记录时,如果只改其一,就会影响数据的完整性。如删除父表的某记录后,子表的相应记录未删除,致使这些记录称为孤立记录。对于更新、插入或删除表间数据的完整性,统称为参照完整性。通常,在客观现实中的实体之间存在一定联系,在关系模型中实体及实体间的联系都是以关系进行描述,因此,操作时就可能存在着关系与关系间的关联和引用。
在关系数据库中,关系之间的联系是通过公共属性实现的。这个公共属性经常是一个表的主键,同时是另一个表的外键。参照完整性体现在两个方面:实现了表与表之间的联系,外键的取值必须是另一个表的主键的有效值,或是“空”值。
参照完整性规则(Referential Integrity)要求:若属性组F是关系模式R1的主键,同时F也是关系模式R2的外键,则在R2的关系中,F的取值只允许两种可能:空值或等于R1关系中某个主键值。
R1称为“被参照关系”模式,R2称为“参照关系”模式。
注意:在实际应用中,外键不一定与对应的主键同名。外键常用下划曲线标出。经过系统分析员、数据库分析员、用户的共同努力,确定系统模型中应该包含的对象,如人事及工资管理系统中的部门、员工、经理等,以及各种业务规则。
在完成寻找业务规则的工作之后,确定要作为数据库完整性的业务规则,并对业务规则进行分类。其中作为数据库模式一部分的完整性设计按下面的过程进行。而由应用软件来实现的数据库完整性设计将按照软件工程的方法进行。此阶段就是将概念结构转换为某个DBMS所支持的数据模型,并对其进行优化,包括对关系模型的规范化。此时,依据DBMS提供的完整性约束机制,对尚未加入逻辑结构中的完整性约束列表,逐条选择合适的方式加以实现。
在逻辑结构设计阶段结束时,作为数据库模式一部分的完整性设计也就基本完成了。每种业务规则都可能有好几种实现方式,应该选择对数据库性能影响最小的一种,有时需通过实际测试来决定。
关于数据库工作原理,数据库原理需要什么基础的介绍到此结束,希望对大家有所帮助。