
写在文章前:本系列文章用于博主自己归纳复习一些基础知识,同时也分享给可能需要的人,因为水平有限,肯定存在诸多不足以及技术性错误,请大佬们及时指正。
存储过程 是事先经过编译并存储在数据库中的一段SQL语句的集合。想要实现相应的功能时,只需要调用这个存储过程就行了(类似于函数,输入具有输出参数)。
优点 :
缺点 :
Delete用来删除表的全部或者部分数据,执行delete之后,用户需要提交之后才会执行,会触发表上的DELETE触发器(包含一个OLD的虚拟表,可以只读访问被删除的数据),DELETE之后表结构还在,删除很慢,一行一行地删,因为会记录日志,可以利用日志还原数据;
Truncate删除表中的所有数据,这个 *** 作不能回滚,也不会触发这个表上的触发器。 *** 作比DELETE快很多(直接把表drop掉,再创建一个新表,删除的数据不能找回)。如果表中有自增(AUTO_INCREMENT)列,则重置为1。
Drop命令从数据库中删除表,所有的数据行,索引和约束都会被删除。不能回滚,不会触发触发器。
触发器(TRIGGER)是由事件(比如INSERT/UPDATE/DELETE)来触发运行的 *** 作(不能被直接调用,不能接收参数)。在数据库里以独立的对象存储,用于保证数据完整性(比如可以检验或转换数据)。
约束(Constraint)类型:
从数据库的基本表中通过查询选取出来的数据组成的虚拟表(数据库中只存放视图的定义,而不存放视图的数据)。可以对其进行增/删/改/查等 *** 作。视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变)。
可以跟基本表一样,进行增删改查 *** 作( 增删改 *** 作有条件限制,一般视图只允许查询 *** 作 ),对视图的增删改也会影响原表的数据。 它就像一个窗口,透过它可以看到数据库中自己感兴趣的数据并且 *** 作它们。 好处:
用于定位在查询返回的结果集的特定行,以对特定行进行 *** 作。使用游标可以方便地对结果集进行移动遍历,根据需要滚动或对浏览/修改任意行中的数据。主要用于交互式应用。它是一段私有的SQL工作区,也就是一段内存区域,用于暂时存放受SQL语句影响的数据,简单来说,就是将受影响的数据暂时放到了一个内存区域的虚表当中,这个虚表就是游标。
游标是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。即游标用来逐行读取结果集。游标充当指针的作用。尽管游标能遍历结果中的所有行,但他一次只指向一行。
游标的一个常见用途就是保存查询结果,以便以后使用。游标的结果集是由SELECT语句产生,如果处理过程需要重复使用一个记录集,那么创建一次游标而重复使用若干次,比重复查询数据库要快的多。通俗来说,游标就是能在sql的查询结果中,显示某一行(或某多行)数据,其查询的结果不是数据表,而是已经查询出来的结果集。
简单来说:游标就是在查询出的结果集中进行选择性 *** 作的工具。
让缓存更高效。对于连接查询,如果其中一个表发生变化,那么整个查询缓存就无法使用。而分解后的多个查询,即使其中一个表发生变化,对其它表的查询缓存依然可以使用。分解成多个单表查询,这些单表查询的缓存结果更可能被其它查询使用到,从而减少冗余的查询。减少锁竞争。
索引是对数据库表中一列或多列的值进行排序的一种结构(说明是在列上建立的),使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。索引的一个主要目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。
当表中有大量记录时,若要对表进行查询,第一种搜索信息方式是全表搜索,是将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记录,这样做会消耗大量数据库系统时间,并造成大量磁盘I/O *** 作。第二种就是在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录。
例如这样一个查询:select from table1 where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止。有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多。可见,索引是用来定位的。
从应用上分, 主键索引(聚集) , 唯一索引(聚集/非聚集) , 普通索引 , 组合索引 , 单列索引和全文索引
--视图:对数据库表中数据的引用组成的逻辑表
create view Test
as
select stuinfostuNo,stuInfostuName,stuinfostuGender,W_Exam,L_Exam from stuInfo inner join
examInfo on
stuInfostuNo = ExamInfostuNo
视图本身并不是真正的表,只是存储了一个查询的关系。不知道你用过连接查询没有,可以联合几张表,通过一定的关系抽取几张表中需要的字段来组成一个新的表。而每次联合查询都要清楚的描述这几张表的关系,比如你程序里面多个地方都要用这种逻辑关系来组织数据的话就比较麻烦,所以就诞生了视图,视图可以把这种关系存储在数据库中,如此一来就好比多出了一个新的表,但实质上并没有多占用数据库空间,仅仅是利用几张表的关系来生成一个逻辑上的表。但是其 *** 作同真实的表完全一样,你同样可以插入,修改,检出数据,视图会根据设置好的逻辑关系自动的将数据存储到真实的表中。 视图好像不存在索引,他本身只是一个虚拟的表
1索引
索引是一个单独的,物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标志这些值的数据页的逻辑指针清单索引是依赖于表建立的,它提供了数据库中编排表中数据的内部方法一个表的存储是由两部分组成的,一部分是用来存放表 的数据页面,另一部分存放索引页面索引就存放在索引页面上
从某种程度上,可以把数据库看作一本书,把索引看作书的目录,通过目录查找书中的信息,显然较没有目录的书方便,快捷
按照上面的解释看书的目录这个比喻:
>>它实际存,占据了书的内容,纸张
>>它指向实际存在的内容。比如要找第一章,那么目录后面的页码便为
我们提供了一个快捷的方法。当然对数据库来说,这些都是透明的我 们不能看到的。但的确提高了数据库返回给我们查询结果的效率。
另外,我们要将它与查询常用到的order by区分开。前几天公司里新员工培训曾遇到有的同学j混淆了。
所谓order by只不过是将返回的结果按要求排好顺序,方便我们的使用。它对所在的查询语句返回给我们结果是效率或其它方面(除去我们对结果的应用)是没有任何用处的。
另外有一种唯一索引,也就是主键(简单理解就是一个表中,如果在某列上建立了唯一索引,则该列不可以有两个一样的记录出现)
但唯一索引有时会使我们插入/修改数据效率降低---或说就是降低了。只是数据量小时不明显。因为每次插入/修改都会检查完所有记录,看是否有该值存在。
>>>>就像要求每个身份z号只能一人使用,那么分配一个身份z号时就要检查一下是否已经有人在用这个身份z号(当然我们现实中可能已经排好了,我们用到哪个,下一个会用哪个)
2视图
首先看一下一些标准的说法
视图是原始数据库数据的一种变换,是查看表中数据的另外一种方式。可以将视图看成是一个移动的窗口,通过它可以看到感兴趣的数据。
视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。
视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中。通过视图看到的数据存放在基表中。
视图看上去非常象数据库的物理表,对它的 *** 作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些视图可以修改对应的基表,有些则不能(仅仅能查
>>>如果说索引是为了效率,那么视图是为了我们使用的方便。
>>>视图实际存在,能像对表的应用一样 *** 作(但有限制)
>>>所谓视图存在并不它的数据存在于视图中,而中是定义存在。它的数据仍存放在原来数据表中。就像你的档案有你的完整描述(假设这就是定义)虽然它能代表你,能在你上面反应一些k事(如给你记过的处分)但你本身并不在这。你实际也许现在正在国外呢
>>>
>>>如果把视图比喻一下,就像你从指缝中只看你想看的人或东西。
比如你只想看你前面三个人的手里是不是有钱包,你从指缝里看到它们的手就是一个视图。而对其它数据不关心。
>>>现用库表来说一下。学生表有许多描述学生的信息。成绩表有许多课目的成绩。你只想列出名字,学号,课目,成绩。那么你至少有两种三种方法:
》》》1再建一个表存这些数据。显然这会占空间,而且你在更新那两个表时也要更新这个表,很容易忘记。
》》》2用查询语句查出结果。但要每次 *** 作(当然可以写存储过程--但不能对结果再 *** 作;;;也可以写临时表---但对它的 *** 作也不方便)
》》》3建视图。把需要的数据的定义放到视图中,以后查询可以直接用这个视图名,如同用表名一样。
注意:前面讲到并不是所有对视图的 *** 作都会完成对原表的 *** 作。一个简单的例子,,视图某一列(金额)由(单价数量)获得,更新视图的金额这一列,如100改成200,则多出100,但数据库并不知道如何把这100分给单价还是数量。
--------------累死了,可能输入的有错别字,见谅
我的理解是视图本身就是虚拟表,也就是当查询这张视图的时候,都是临时去组建相关表的关联以及相关聚合函数,如果视图的聚合建立了索引后,相关表的关联以及聚合结果也会预先保存起来,而不是临时去关联聚合,这样性能会有所提升,索引将保存在索引表里,当查询使用到索引的时候,能够快速从索引表找到对应数据,加快数据的读取速度
以上就是关于数据库基础详解:存储过程、视图、游标、SQL语句优化以及索引全部的内容,包括:数据库基础详解:存储过程、视图、游标、SQL语句优化以及索引、sql中。索引视图与索引是什么关系、SQL语言中所说的视图具体是什么意思他与基本表,索引有何关系举例说明等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)