zoukankan      html  css  js  c++  java
  • TSQL 基础学习 04

    索引

           示意图

    定义

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

              作用

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

    索引六大类

    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

  • 相关阅读:
    linux -- Ubuntu 安装搜狗输入法
    linux -- Ubuntuserver图形界面下安装、配置lampp、phpmyadmin
    linux -- ubuntu14.10安装gnome桌面环境和dock工具
    linux -- Ubuntu Server 安装图形界面
    linux -- Ubuntu 命令技巧合集
    linux -- ubuntu 何为软件源
    linux -- Ubuntu报错“unable to locate package...”
    linux -- Ubuntu图形界面终端实现注销、关机、重启
    php -- 读取文本文件内容
    NEXTDAY
  • 原文地址:https://www.cnblogs.com/ciade/p/4788329.html
Copyright © 2011-2022 走看看