Sql Server事物、索引、视图

事务概念:

事务是一种机制,它包含了一组数据库操作命令,而且将所有的命令作为一个整体向数据库提交或撤销。

这组命令要么执行,要么都不执行,所以事务是一个不可分割的逻辑工作单元。

事务的特点:

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中已经存在要创建的视图对象,

则需要先删除再创建。

时间: 2024-12-25 21:15:11

Sql Server事物、索引、视图的相关文章

细说Sql Server中的视图(上)转载

原文:细说Sql Server中的视图(上)http://www.cnblogs.com/xbf321/archive/2009/06/16/view_in_sqlserver.html 1,什么是视图? 2,为什么要用视图: 3,视图中的ORDER BY; 4,刷新视图: 5,更新视图: 6,视图选项: 7,索引视图: 细说Sql Server中的视图(下)   应大家要求已在“细说Sql Server中的视图(上)”中添加“为什么要用视图”一小节. 1.什么是视图 视图是由一个查询所定义的虚

[转]SQL SERVER整理索引碎片测试

SQL SERVER整理索引碎片测试 SQL SERVER整理索引的方法也就这么几种,而且老是自作聪明的加入智能判断很不爽,还是比DBMS_ADVISOR差远了: 1SQL SERVER 2000/2005 查询 2000use DB_Namedeclare @table_id intset @table_id=object_id('Table_Name')dbcc showcontig(@table_id) 2005SELECT index_id,index_type_desc,avg_fra

细说Sql Server中的视图(下)转载

原文:细说Sql Server中的视图(下)http://www.cnblogs.com/xbf321/archive/2009/06/19/view_two_in_sqlserver.html 1,什么是视图? 2,为什么要用视图: 3,视图中的ORDER BY; 4,刷新视图: 5,更新视图: 6,视图选项: 7,索引视图: 细说Sql Server中的视图(上)    应大家要求已在“细说Sql Server中的视图(上)”中添加“为什么要用视图”一小节.  5.更新视图 视图是一个虚拟表

SQL Server查看索引重建、重组索引进度

原文:SQL Server查看索引重建.重组索引进度 相信很多SQL Server DBA或开发人员在重建或重组大表索引时,都会相当郁闷,不知道索引重建的进度,这个对于DBA完全是一个黑盒子,对于系统负载非常大的系统或维护窗口较短的系统,你会遇到一些挑战.例如,你创建索引的时候,很多会话被阻塞,你只能取消创建索引的任务.查看这些索引维护操作的进度.预估时间对于我们有较大的意义,需要根据这个做一些决策.下面我们来看看看看如何获取CREATE INDEX.ALTER INDEX REBUILD.AL

SQL Server获取索引创建时间&amp;重建时间&amp;重组时间

原文:SQL Server获取索引创建时间&重建时间&重组时间 之前写过一篇博客"SQL Server中是否可以准确获取最后一次索引重建的时间?",里面主要讲述了三个问题:我们能否找到索引的创建时间?最后一次索引重建(Index Rebuild)的时间? 最后一次索引重组(INDEX REORGANIZE)的时间呢?,当时得出的结论,答案是我们无法准确的找到索引的创建时间.最后一次索引重组时间,最后一次索引重建的时间.但是最近看到一篇博客"SQL Server

公司内部培训SQL Server传统索引结构PPT分享

公司内部培训SQL Server传统索引结构PPT分享 下载地址 http://files.cnblogs.com/files/lyhabc/SQLServer%E4%BC%A0%E7%BB%9F%E7%B4%A2%E5%BC%95%E7%BB%93%E6%9E%84.ppt PPT有不对的地方,多多拍砖o(∩_∩)o

SQL Server 的索引结构实例

目前SQL Server 的索引结构如下: 这个是聚集索引的存放形式: 非聚集索引的方式如下: 它们是以B+树的数据结构存放的. 相信大家都看过类似的图,但是没有直观的认识,下面举一个实际的例子来说明图的结构. USE Test --1.创建表,指定主键(会自动创建聚集索引) CREATE TABLE Person ( Id int NOT NULL IDENTITY, Name varchar(10) NOT NULL, Sex varchar(2) NOT NULL, CONSTRAINT

(转)SQL Server创建索引

什么是索引拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K .为了加快查找的速度,汉语字(词)典一般都有按拼音.笔画.偏旁部首等排序的目录(索引),我们可以选择按拼音或笔画查找方式,快速查找到需要的字(词).同理,SQL Server允许用户在表中创建索引,指定按某列预先排序,从而大大提高查询速度.? SQL Server中的数据也是按页( 4KB )存放? 索引:是SQL Server编排数据的内部方法.它为

SQL Server事物的存储过程

在酒店管理系统开发中,我们会创建房间表和房间类型表(房型表)这两个表,如下图所示: 房型表:RoomType 房间表:Room 首先这两个表的关系:Room是从表,RoomType是主表,两表有主外键关系,RoomType.rTypeId=Room.rTypeId 分析这两个表,我们会发现这样一个问题:在房间表和房型表管理中,当我们修改或者删除一个RoomType表,对应的Room表我们也要做修改和删除,那么我们怎么解决这个问题呢?首先可以在数据库中设置级联删除,或者利用触发器也可以解决...这

sql server 2008 索引

微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclustered index,也称非聚类索引.非簇集索引) 我们举例来说明一下聚集索引和非聚集索引的区别: 我们的汉语字典的正文本身就是一个聚集索引.比如,我们要查“吃”字,就会很自然地翻开字典的前几页,因为“吃”的拼音是“chi”,而按 照拼音排序汉字的字典是以英文字母“c”开头并以“z”结尾的,那么“吃”字就自然地排在字典的前部.如果您翻完了所有以“c”开头的部分