欢迎投稿

今日深度:

Sql Server事物、索引、视图,sqlserver

Sql Server事物、索引、视图,sqlserver


事务概念:
事务是一种机制,它包含了一组数据库操作命令,而且将所有的命令作为一个整体向数据库提交或撤销。
这组命令要么执行,要么都不执行,所以事务是一个不可分割的逻辑工作单元。

事务的特点:
1、原子性:事务作为一个完整性的操作,其各元素是不可分割的,要么全部执行,要么撤销所有的操作,事务的单元不可能出现部分成功的情况。
2、一致性:事务完成前后,数据必须保持完全一致的状态。即在事务开始或完成后,数据库中存储的数据都必须保持一致的状态。
3、隔离性:事务是相对独立的,在一个事务对数据进行修改时,其他的事务变不可能修改。
4、持久性: 事务完成后,其对于系统的影响是永久的。即一个事务如果提交成功,DBMS保证它对数据库中数据的改变是永久性的,不会受任何系统故障的影响。

在T-SQL总是用下列语法来管理事务:
1、开始事务:BEGIN TRANSACTION
2、提交事物:COMMIT TRANSACTION
3、回滚事务:ROLLBACK TRANSACTION

索引可分为3类:
1、唯一索引:不允许有两行相同的索引值,所以唯一索引一般在主键或创建了唯一约束的列上创建。当在列上创建了唯一约束后,
将自动在此列创建一个唯一索引。
2、聚集索引:聚集索引根据数据行的键值在表或视图中排列和存储这些数据行,即表中行的物理顺序与索引顺序相同。每个表只能有一个
聚集索引,因为数据行本身只能按一个顺序排序。如果表具有聚集索引,则该表称为聚集表,表中的数据行按索引顺序进行排序,如果
没有聚集索引,则其数据行存储在一个称为堆的无序结构中。
3、非聚集索引:非聚集索引具有独立于数据行的结构。非聚集索引包含非聚集索引键值,且每个键值都有指向包含该键值的数据行的指针。

使用T-SQL创建索引
语法:
CREATE [UNIQUE] [CLUSTERED|NOCLUSTERED] INDEX indexname ON tablename
(字段名)
[WITH FILLFACTOR=x]
语法说明:UNIQUE指定创建的是唯一索引,可选项CLUSTERED、NOCLUSTERED指定是聚集索引还是非聚集索引,可选项indexname表示索引名,
索引的命名规范是“ix_表名称_列名”。FILLFACTOR表示填充因子,用于设置索引页数据填充的空间百分比,即每个索引页的剩余空间。指定范围是
0~100,假如取值为70%,则表示还有30%的空间供以后扩展使用。0等同于100,表示页级别几乎已填满,但留出了一些空间,至少能在添加一个索引行。
示例如下:
USE Bank
GO
if exists(select name from sysindexes where name='index_card_no')
BEGIN
drop index ALL_PURPOSE_CARD.index_card_no
END
create nonclustered index index_card_no on ALL_PURPOSE_CARD
(CARD_NO) with fillfactor=30
GO
如上示例使用exists子查询从系统视图sysindex中检查名为index_card_no的索引是否存在。如果存在,则使用drop index语句删除,然后再表ALL_PURPOSE_CARD的
CARD_NO列上创建非聚集索引。一般而言,创建索引后,不需要在查询时显示指定依据那个索引进行查询,因为数据库引擎会自动对查询进行优化。
利用索引进行查询:
select * from ALL_PURPOSE_CARD with(index=index_card_no) where LAST_USED_DATE between '2011-07-01'and'2012-12-30'
若存在多个索引可以使用WITH(INDEX=索引名)显示指定索引进行查询
*提醒:使用索引可以加快数据检索速度,但没有必要为每个列都要创建索引,因为索引本身也需要维护
可以依据下列标准选择创建索引:1、该列用于频繁搜索;2、该列用于对数据进行排序;3、该列中重复值少。
下面的列不适合建立索引:1、列中重复值多;2、标中数据少(为小型的表建立索引是不必要的,因为检索索引的时间可能比检索索引的时间还要长);3、频繁进行
插入操作的列(因为每次新添加了数据,索引都需要重新维护)。

视图:视图是一种虚拟表,其内容由查询定义。
使用T-SQL语句创建视图
语法:CREEATE VIEW viewname AS <select 语句>
示例:
USE Bank
GO
if exists(select * from sysobjects where name='view_credit_detail')
drop view_credit_detail
GO
create view view_credit_detail
AS SELECT ACCOUNT.ACCOUNT_NAME, CREDIT_CARD.CREDIT_CARD_NO, EXCHANGE.LOAN,EXCHANGE.EXTIME,EXCHANGE.EXADDRESS,EXCHANGE.PAY_MONTH
FROM ACCOUNT INNER JOIN CREDIT_CARD
ON ACCOUNT.ACCOUNT_ID=CREDIT_CARD.ACCOUNT_ID INNER JOIN EXCHANGE
ON CREDIT_CARD.CREDIT_CARD_ID=EXCHANGE.CREDIT_CARD_ID
GO
以上代码表示,如果在系统视图sysobject中已经存在要创建的视图对象,
则需要先删除再创建。


 


sql server 2005中的索引,视图有什用

索引是为了提升数据查询性能,视图一般用于给用户提供一个统一的接口而屏蔽掉无用或需要保密的信息。
一般来说,如果数据量不是太大,比如只有几万条记录,不需要建索引,索引本身也是一种数据,系统为了维护索引,是需要开销的。如果数据量非常大,就一定会用到索引技术。比如上百万、几千万的数据量。此时如果在数据表上没有索引,数据查询会非常慢。索引其实就是预先给数据排序,比如身份证号,如果在这个字段上有索引,那么从大到小都已经有序了,需要查询某一个号码,系统可以很快检索到对应的数据。
在数据库中,不是每一个级别的用户都需要全部信息,在某些时候,有些敏感的信息甚至只能给具有合适权限的人员,即便用户进入了数据库(不是指的程序界面检索,而是直接进入了数据库管理系统),也不可以让他查看全部信息,此时就可以用视图的方法,让用户只能查看他应该看的信息,真正的基础表屏蔽起来。
 

sql server 2005 索引跟视图的功可以有什不同

据库中索引原理
实际上,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:

聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。下面,我们

举例来说明一下聚集索引和非聚集索引的区别:

其实,我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“an

”,而按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”

开头的部分仍然找不到这个字,那么就说明您的字典中没有这个字;同样的,如果查“张”字,那您也会将您的字典翻到最后部分,因为“张

”的拼音是“zhang”。也就是说,字典的正文部分本身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。

我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。

如果您认识某个字,您可以快速地从自动中查到这个字。但您也可能会遇到您不认识的字,不知道它的发音,这时候,您就不能按照刚才的方

法找到您要查的字,而需要去根据“偏旁部首”查到您要找的字,然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合“部首

目录”和“检字表”而查到的字的排序并不是真正的正文的排序方法,比如您查“张”字,我们可以看到在查部首之后的检字表中“张”的页

码是672页,检字表中“张”的上面是“驰”字,但页码却是63页,“张”的下面是“弩”字,页面是390页。很显然,这些字并不是真正的分

别位于“张”字的上下方,现在您看到的连续的“驰、张、弩”三字实际上就是他们在非聚集索引中的排序,是字典正文中的字在非聚集索引

中的映射。我们可以通过这种方式来找到您所需要的字,但它需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。

我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。

通过以上例子,我们可以理解到什么是“聚集索引”和“非聚集索引”。

进一步引申一下,我们可以很容易的理解:每个表只能有一个聚集索引,因为目录只能按照一种方法进行排序

视图的好处,可以主要分为四点:
我简单的说一下,希望你能明白。

第一点:
使用视图,可以定制用户数据,聚焦特定的数据。

解释:
在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话,
采购人员,可以需要一些与其有关的数据,而与他无关的数据,对他没
有任何意义,我们可以根据这一实际情况,专门为采购人员创建一个视
图,以后他在查询数据时,只需select * from view_caigou 就可以啦。

第二点:使用视图,可以简化数据操作。

解释:我们在使用查询时,在很多时候我们要使用聚合函数,同时还要
显示其它字段的信息,可能还会需要关联到其它表,这时写的语句可能
会很长,如果这个动作频繁发生的话,我们可以创建视图,这以后,我
们只需要select * from view1就可以啦~,是不是很方便呀~

第三点:使用视图,基表中的数据就有了一定的安全性

因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以
......余下全文>>
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/4316.html NewsArticle Sql Server事物、索引、视图,sqlserver 事务概念: 事务是一种机制,它包含了一组数据库操作命令,而且将所有的命令作为一个整体向数据库提交或撤销。 这组命令要么执行,要么都不执...
评论暂时关闭