索引

       示意图

定义

索引提供指针指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些指针

作用

通过使用索引,大大提高数据库的检索速度,改善数据库性能

索引六大类

1.       唯一索引

a)        唯一索引不允许两行具有相同的索引值

2.       主键索引

a)        在数据库关系图中为表定义一个主键将自动创建主键索引,它是一种特殊类型

3.       聚集索引

a)        表中各行的物理顺序与键值的逻辑(索引)顺序相同

4.       非聚集索引

a)        非聚集索引建立在索引页上,在查询数据时可以从索引中找到记录存放的位置

b)       一个表只能创建一个聚集索引,但可以有多个非聚集索引

5.       复合索引

a)        在创建索引时,并不是只对其中一列创建索引,与创建主键一样,可以将多个列组合

6.       全文索引

a)        一种特殊类型的基于标记的功能性索引,由SQL Server中全文引擎服务创建和维护

建立索引列的标准

1.频繁搜索的列

2.经常用作查询选择的列

3.经常排序,分组的列

4.经常用作连接的列(主键/外键)

切忌不要使用下面的列创建索引

1.       仅包含几个不同值的列

2.       表中仅包含几行

经验

A.      查询时减少使用*返回全部列,不要返回不需要的列

B.      索引应该尽量小,在字节数小的列上建立索引

C.      WHERE子句中有多个条件表达式时,包含索引列的表达式应置于其他条件表达式之前

D.     避免在ORDER BY子句中使用表达式

E.      根据业务数据发生频率,定期重新生成或重新组织索引,进行碎片整理

创建索引

              CREATE [UNIQUE][CLUSTERED|NONCLUSTERED] INDEX index_name

ON 表名(column_name[,column_name]…)

[WITH FILLFACTOR=X]

说明

UNIQUE指定唯一索引(可选)

CLUSTERED,NONCLUSTERED指定是聚集索引还是非聚集索引(可选)

FILLFACTOR表示填充因子,指定一个0~100的值,该值指示索引页填满的空间所占的百分比

删除索引

              DROP INDEX table_name.index_name

注意

1.       删除表时,该表的所有索引同时会被删除

2.       如果要删除表的所有索引,首先要删除非聚集索引,然后再删除聚集索引

查看索引

       用系统存储过程sp_helpIndex查看:

sp_helpIndex Table_name

用视图sys.indexes查看

SELECT * FROM sys.indexes

维护索引

       语法

方法一:

DBCC SHOWCONTIG ([表名/表ID/视图名/视图ID][,对碎片信息检索的索引])

WITH ALL_INDEXES 或 ALL_INDEXES TABLERESULTS

或 ALL_INDEXES 或 FAST|ALL_LEVELS

方法二:

DBCC INDEXDEFRAG (数据库名,表名/视图名,视图ID)

WITH NO_INFOMSGS --禁止显示所有信息性消息

储存过程

       定义

他是SQL语句和控制语句的预编译集合,他可包含逻辑控制语句和数据操作语句,可以接受参数,输出参数,返回单个或多个结果集以及返回值

优点

1.       模块化程序设计

2.       执行速度快,效率高

3.       减少网络流量

4.       具有良好的安全性

分类

              系统存储过程(System Stored Procedures)

用户自定义的存储过程(User-defined StoredProcedures)

常用存储过程

系统存储过程

说明

sp_database

列出服务器上的所有数据库信息,包括数据库名和数据大小

sp_helpdb

报告有关指定数据库或所有数据库的信息

sp_renamedb

更改数据库的名称

sp_tables

返回当前环境下可查询的表或视图的信息

sp_columns

返回某个表或视图的列信息,包括列的数据类型和长度等

sp_help

查看某个数据库对象的信息,如:列名,主键,约束,外键,索引等

sp_helpconstraint

查看某个表的约束

sp_helpindex

查看某个表的索引

sp_stored_procedures

显示存储过程的列表

sp_password

添加或修改登录账户的密码

sp_helptext

显示默认值,未加密的存储过程,用户定义的存储过程,触发器或视图的实际文本

 

存储过程的使用

              EXEC[UTE] 存储过程名[参数值]

常用的扩展存储过程

              注:

它通常’xp_’作为前缀,以DLL形式单独存在

语法

EXECxp_cmdshell DOS命令 [NO_OUTPUT]

存储过程的三部分

A.      输入参数和输出参数

B.      在存储过程中执行的T-SQL语句

C.      存储过程的返回值

存储过程的参数

              输入参数

可以在调用时向存储过程传递参数

输出参数

如果希望返回值,则可以使用输出参数,输出参数后有”OUTPUT”标记.

创建无参存储过程

       语法

CREATEPROC[EDURE] 存储过程名

[

{@参数1 数据类型}[=默认值] [OUTPUT],

{@参数2 数据类型}[=默认值] [OUTPUT]

]

AS

SQL语句

删除存储过程

       语法

DROPPROC[EDURE] 存储过程名

创建有参存储过程

       注意

如果存储过程的参数后面有”OUTPUT”关键字,表示此参数为输出参数,否则视为输入参数,输入参数还可以设置为默认值

语法

EXEC[UTE][返回值=] 存储过程名 [@参数1=] [OUTPUT] | [DEFAULT],

…..,

[@参数1=]参数值n [OUTPUT] | [DEFAULT]

注:

                     OUTPUT表明参数是输出参数,DEFAULT表示参数的默认值

为了调用方便,最好将有默认值的参数放在存储过程参数列表的最后

PAISERROR语句

       语法

RAISERROR({msg_id | msg_str}{,severity,state} [WITH option[,…n]])

注:

msg_id:在sysmessages系统表中指定的用户定义错误信息

msg_str:用户定义的特定信息,最长为255个字符

severity:与特定信息相关联,表示用户定义的严重性级别

state:表示错误的状态,是1~127的值

option:指示是否将错误记录到服务器错误日志中

游标

定义

处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次以行或者多行进行或向后浏览数据的能力,我们可以把游标当做一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理

游标种类

       Transact_SQL游标

Transact_SQL游标是由DECLARECURSOR 语法定义、主要用在Transact_SQL 脚本、存储过程和触发器中。Transact_SQL 游标主要用在服务器上,由从客户端发送给服务器的Transact_SQL 语句或是批处理、存储过程、触发器中的Transact_SQL 进行管理。 Transact_SQL游标不支持提取数据块或多行数据

       API服务器游标

API 游标支持在OLE DB, ODBC 以及DB_library 中使用游标函数,主要用在服务器上。每一次客户端应用程序调用API 游标函数,MS SQL SEVER 的OLE DB 提供者、ODBC驱动器或DB_library 的动态链接库(DLL)都会将这些客户请求传送给服务器以对API游标进行处理。

       客户游标

客户游标主要是当在客户机上缓存结果集时才使用。在客户游标中,有一个缺省的结果集被用来在客户机上缓存整个结果集。客户游标仅支持静态游标而非动态游标。由于服务器游标并不支持所有的Transact-SQL 语句或批处理,所以客户游标常常仅被用作服务器游标的辅助。因为在一般情况下,服务器游标能支持绝大多数的游标操作。

声明游标语法

       向前

DECLARE游标名 cursor

向后

DECLARE游标名 ScrollCursor

FOR

SELECT列名1,列名2 FROM 表名

Where条件

游标语法

        DECLARE 游标名 SCROLL CURSOR

FOR SELECT * FROM 表名

OPEN 游标名                                                           --打开游标

FETCH NEXT FROM 游标名                                --提取第一行数据

FETCH LAST FROM 游标名                                 --提取最后一行数据

FETCH FIRST FROM 游标名                                --提取第一行数据

FETCH ABSOLUTE 3 FROM 游标名                   --提取第三行数据

FETCH RELATIVE 5 FROM 游标名                    --提取当前行开始的第五行数据

DEALLOCATE游标名                                       --销毁游标

DEALLOCATE游标名                                           --删除游标

游标的组成

       两个部分

1.       游标结果集

a)        定义该游标得SELECT语句返回的行的集合

2.       游标位置

a)        指向这个结果集某一行的当前指针

游标的生命周期

A.      声明游标

B.      打开游标

C.      读取游标数据

D.     关闭游标

E.      释放游标

临时表和表变量

       临时表

定义

临时表就是临时生成一个表放在Tempdb中

语法

本地临时表: #表名

全局临时表:##表名

注:

用完后记得要Drop掉

表变量

       语法

Declare@user TABLE(变量名,变量名,变量3….)

触发器工作原理

        触发器是一个特定表格中发生特定操作时所激活的一种机制.

触发器包括3个组成部分:

A.      触发器的名称

B.      触发器中进行的操作

C.      触发器操作的执行过程

       注:

触发器操作可以是INSERT语句,UPDATE语句和DELETE语句

触发器的优点

1.       触发器可以通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以有效执行

2.       触发器可以强制比用CHECK定义的约束更为复杂的约束

3.       触发器可以检测数据修改前后的表状态,并根据其差异采取对策

4.       一个表中的多个同类触发器(INSERT UPDATE DELETE)允许采取多个不同的对策以响应一个修改语句

创建触发器

       语法

CREATETRIGGER 触发器名称

ON 表名/视图名

[WITHENCRYPTION]              --加密syscomments表中包含CREATE TRIGGER语句文本的条目

//AFTER默认触发器. INSTEAD OF指定执行触发器而不执行SQL语句

FOR  [INSERT/UPDATE/DELETE]/[AFTER/INSTEADOF]

AS

//需要执行的操作

BEGIN

处理事件

ROLLBACKTRANSACTION

END

转载出至:http://blog.csdn.net/heqingsong1/article/details/7495496

T-SQL 基础学习 04的更多相关文章

  1. Oracle SQL 基础学习

    oracel sql 基础学习 CREATE TABLE USERINFO ( ID ,) PRIMARY KEY, USERNAME ), USERPWD ), EMAIL ), REDATE DA ...

  2. SQL 基础学习(2) Joining 和function , 作业没有做,需要看百宝箱。NOsql的概念

    SQL 基础学习(2) Joining 可以同时关联(joining)多张表进行复杂的查询. 相比于用Rails捞出数据再用Ruby进行过滤组合,使用SQL更加高效,节能. 以下是 users has ...

  3. SQL 基础学习(1):下载DB Browser for SQLite. 下载graphviz(为了使用Rails ERD的前提)出现❌,已debug.

    SQL is a standard language for storing, manipulating and retrieving data in databases. 关系型数据库:RDBMS( ...

  4. SQL基础学习_04_视图

    视图 1. 视图的创建     视图就是保存好的SELECT语句,这些SELECT语句执行之后会产生新的表,所以在SQL中,视图和表是不做差别对待的,也就是SQL也可以对视图做一些操作:     由于 ...

  5. sql基础学习

    学习参考网站:http://www.runoob.com/sql/sql-tutorial.html 一.SQL命令 1.SELECT 语句 用于从数据库中选取数据. select column_na ...

  6. SQL基础学习_05_函数、谓词、CASE表达式

    函数 算术函数 1. 四则运算: +.-.*./  2. ABS:求绝对值, ABS(数值) 3. MOD: 求余,MOD(被除数,除数) 4. ROUND:四舍五入,ROUND(对象数值,保留小数的 ...

  7. SQL基础学习_03_数据更新

    数据的插入 1. 基本INSERT语句     INSERT的基本语法为:     INSERT INTO  <表名> (列1, 列2, 列3,  -) VALUES (值1, 值2, 值 ...

  8. SQL基础学习_02_查询

    SELECT语句 1. SELECT语句查询列(字段):     SELECT <列名>    FROM <表名>;     该语句使用了两个SQL子句,SELECT子句列举了 ...

  9. SQL基础学习_01_数据库和表

    SQL语句及其种类 1. SQL语句分为三类:     DDL(Data Definition Language): CREATE.DROP.ALTER;     DML(Data Manipulat ...

随机推荐

  1. 对象的this引用

    Java中的this关键字总是指向调用该方法的对象.根据this出现位置的不同,this作为对象的默认引用有两个功能: 1.构造器中引用该构造器正在初始化的对象. 2.在方法中引用调用该方法的对象. ...

  2. 85 megacli-查看raid信息

    文章本身我不做过多修改了,在这里我就把自己在安装时候碰到的难点跟大家提下.1.何处下载?首先,根据文章中的路径已经下载不到相应的文件了,在此我们就自己到http://www.lsi.com的网站上去搜 ...

  3. Java集合——ConcurrentHashMap

    集合是编程中最常用的数据结构.而谈到并发,几乎总是离不开集合这类高级数据结构的支持.比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap).这篇文章主 ...

  4. 发布mvc遇到的HTTP错误 403.14-Forbidden解决办法

    发布mvc遇到的HTTP错误 403.14-Forbidden解决办法   <system.webServer>   <validationvalidateIntegratedMod ...

  5. 粗略阅读《Agile Software Development》后的感想

    大致配合翻译和词典阅读了一下这篇文章之后,我另外还查阅了维基百科.百度百科和MBA智库百科还有一些网络上的文章.对敏捷开发有了一个大致上的浅显的认识. 敏捷建模(Agile Modeling,AM)的 ...

  6. QString转LPCWSTR

    QFileInfo info("./records.db"); std::string str = info.absoluteFilePath().toStdString(); / ...

  7. C++11多线程std::thread的简单使用

    在cocos2dx 2.0时代,我们使用的是pthread库,是一套用户级线程库,被广泛地使用在跨平台应用上.但在cocos2dx 3.0中并未发现有pthread的支持文件,原来c++11中已经拥有 ...

  8. NameValueCollection类读取配置信息

    C#中的NameValueCollection类读取配置信息,大家可以参考下.   我首先介绍配置文件中的写法: 1.在VS2015中的工程下建立一个控制台应用程序,其config文件默认名称为App ...

  9. aspose.cells 插入图片

    ,,"d:\\1.jpg"); Aspose.Cells.Drawing.Picture pic = worksheet.Pictures[iIndex]; pic.Placeme ...

  10. leetcode19

    class Solution { public: ; ; ListNode* removeNthFromEnd(ListNode* head, int n) { ; ListNode* node = ...