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掉
表变量
语法
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的更多相关文章
- Oracle SQL 基础学习
oracel sql 基础学习 CREATE TABLE USERINFO ( ID ,) PRIMARY KEY, USERNAME ), USERPWD ), EMAIL ), REDATE DA ...
- SQL 基础学习(2) Joining 和function , 作业没有做,需要看百宝箱。NOsql的概念
SQL 基础学习(2) Joining 可以同时关联(joining)多张表进行复杂的查询. 相比于用Rails捞出数据再用Ruby进行过滤组合,使用SQL更加高效,节能. 以下是 users has ...
- SQL 基础学习(1):下载DB Browser for SQLite. 下载graphviz(为了使用Rails ERD的前提)出现❌,已debug.
SQL is a standard language for storing, manipulating and retrieving data in databases. 关系型数据库:RDBMS( ...
- SQL基础学习_04_视图
视图 1. 视图的创建 视图就是保存好的SELECT语句,这些SELECT语句执行之后会产生新的表,所以在SQL中,视图和表是不做差别对待的,也就是SQL也可以对视图做一些操作: 由于 ...
- sql基础学习
学习参考网站:http://www.runoob.com/sql/sql-tutorial.html 一.SQL命令 1.SELECT 语句 用于从数据库中选取数据. select column_na ...
- SQL基础学习_05_函数、谓词、CASE表达式
函数 算术函数 1. 四则运算: +.-.*./ 2. ABS:求绝对值, ABS(数值) 3. MOD: 求余,MOD(被除数,除数) 4. ROUND:四舍五入,ROUND(对象数值,保留小数的 ...
- SQL基础学习_03_数据更新
数据的插入 1. 基本INSERT语句 INSERT的基本语法为: INSERT INTO <表名> (列1, 列2, 列3, -) VALUES (值1, 值2, 值 ...
- SQL基础学习_02_查询
SELECT语句 1. SELECT语句查询列(字段): SELECT <列名> FROM <表名>; 该语句使用了两个SQL子句,SELECT子句列举了 ...
- SQL基础学习_01_数据库和表
SQL语句及其种类 1. SQL语句分为三类: DDL(Data Definition Language): CREATE.DROP.ALTER; DML(Data Manipulat ...
随机推荐
- 【bzoj1085】 SCOI2005—骑士精神
http://www.lydsy.com/JudgeOnline/problem.php?id=1085 (题目链接) 题意 给出一个初始局面,问能否在15步内走到最终局面,并输出最少步数. Solu ...
- 动手实验iptables的NAT功能实现流量穿透
1.NAT和iptables理论见: http://lustlost.blog.51cto.com/2600869/943110 2.引子 近期,有同事抱怨说数据入库时,由于数据库所在的服务器只有内网 ...
- JQuery datepicker 日期控件设置
datepicker控件可通过参数设置进行语言切换,以下可实现,系统所有日期控件默认为中文,在特定页面或者特定条件下可切换成英语!~ HTML: <!DOCTYPE html> <h ...
- BootStrap的一个标准框架的内容解释——来源于bootstrap官网
<!DOCTYPE html><!--HTML5的定义--><html lang="zh-cn"> <head> <meta ...
- 【原】十张javascript思维导图
下面附上十张javascript思维导图,如果把里面的内容全部掌握,那就是高手了.思维导图提供给我们一个整体的知识体系,也可以说是一种工具,废话不多说,上图: 1.javascript数据类型 2.j ...
- 使用Spring进行统一日志管理 + 统一异常管理
http://blog.csdn.net/king87130/article/details/8011843原文地址 统一日志异常实现类: 1 package com.pilelot.web.util ...
- Java Web学习笔记8
上下文参数(context-param) 由于init-param是配置在<servlet>标签里的,只能有这个Servlet来读取,因此它不是全局的参数,不能被其他的Servlet读取. ...
- Node.js Stream-进阶篇
作者:美团点评技术团队链接:https://zhuanlan.zhihu.com/p/21681115来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 上篇(基础篇)主要 ...
- BZOJ 1833: [ZJOI2010]count 数字计数
Description 问 \([L,R]\) 中0-9的个数. Sol 数位DP. 预处理好长度为 \(i\), 最高位为 \(j\) 的数位之和. 然后从上往下计算,不要忘记往下走的同时要把高位的 ...
- re.search 和 re.match
相同点: 都返回找到的第一个匹配对象 >>> import re >>> m = re.search('(\w+) (\w+)', 'aaa bbb ccc ddd ...