T-SQL 基础学习 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掉

表变量

       语法

[email protected] 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

时间: 2024-10-10 18:06:43

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

SQL基础学习_04_视图

视图 1. 视图的创建 ? ? 视图就是保存好的SELECT语句,这些SELECT语句执行之后会产生新的表,所以在SQL中,视图和表是不做差别对待的,也就是SQL也可以对视图做一些操作: ? ? 由于视图并不实际保存数据,只是保存了执行的SELECT语句,可以节约存储空间,但是对于大数据量的存储,使用视图来频繁操作的话,势必会占用较大的计算时间,也算是一种用时间换空间的方案. ? ? 通过以下语句创建视图: ? ? CREATE VIEW 视图名称 (<视图列1>,<视图列2>,&

SQL 基础学习: 和深度学习资料

SQL is a standard language for storing, manipulating and retrieving data in databasee. 关系型数据库:RDBMS(Relational Database Mangement System) SQLite3: Rails默认的轻量级数据库,集成于Rails中,在db/development.sqlite3这个档案中. 用途:单机用途.所以在实际部署的时候会换成MySQL等数据库服务器. MySQL: 目前流行的开

sql基础学习

学习参考网站:http://www.runoob.com/sql/sql-tutorial.html 一.SQL命令 1.SELECT 语句 用于从数据库中选取数据. select column_name,column_name from table_name; #数据库中选取某个表格某几列数据 select * from table_name; #数据库中选取某个表格所有列数据 2.SELECT DISTINCT 语句 用于返回唯一不同的值. select distinct column_na

swift基础学习(04)[运算符、属性、属性观察器、方法、下脚标本、继承、构造器]

//swift恒等运算符 //===恒等,不等!== //运用这两个运算符检测两个常量或者变量是否引用同一个实例 //"等价于"表示两个类类型(class type)的常量或者变量引用同一个类实例. //等于"表示两个实例的值"相等"或"相同",判定时要遵照设计者定义的评判标准,因此相对于"相 等"来说,这是一种更加合适的叫法. //类和结构体的选择 //属性的存储只能是类或者是结构体 //存储属性:变量存储属性va

SQL基础学习笔记(三)—约束

约束: 一.创建表时,定义约束 create table emp2( id number(10) constraint emp2_id_nn not null, name varchar2(20) not null, salary number(10,2) ) constraint emp2_id_nn 给约束起个名增加阅读性,不写也行,会自动加上sys_XXXX 作用范围: ①列级约束只能作用在一个列上 ②表级约束可以作用在多个列上(当然表级约束也可以作用在一个列上) 定义方式:列约束必须跟在

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

函数 算术函数 1. 四则运算: +.-.*./? 2. ABS:求绝对值, ABS(数值) 3. MOD: 求余,MOD(被除数,除数) 4. ROUND:四舍五入,ROUND(对象数值,保留小数的位数) 字符串函数 1. 字符串拼接: ||, str1 || str2 || str3 || - || strn ?AS str_all 2. 字符串长度:LENGTH,LENGTH(str1) AS len_str1 3. 小写转换:LOWER,LOWER(str1) AS low_str 4.

SQL基础学习笔记(一)

感觉SQL,学的云里雾里的,整理一下笔记吧. SQL语言分为三种: DML: Data Manipulation Language 数据操纵语言 DDL:  Data Definition Language 数据定义语言 DCL:  Data Control Language 数据控制语言 select * (表示查询表中所有的列 ) from employees; select employee_id , last_name,email from employees;(查询指定) SELECT

SQL基础学习笔记(二)

向表中插入一条数据 <span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>create table emp1 as select employee_id , last_name , hire_date , salary from employees where 1 = 2</strong></span> 需要注意的是,插入的数据,必须和表中数据种类,一一对应 <

SQL基础学习_03_数据更新

数据的插入 1. 基本INSERT语句 ? ? INSERT的基本语法为: ? ? INSERT INTO ?<表名> (列1, 列2, 列3, ?-) VALUES (值1, 值2, 值3, -)??; ? ? 例如:INSERT INTO Shohin (shohin_mei,shohin_bunrui,hanbai_tanka,shiire_tanka,torokubi) VALUES ('pen','office',100,NULL,'2009-11-11'); ? ? 如果插入的是所