




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、事务、视图和索引事务、视图和索引单元单元7 7回顾与作业点评3-1下面的下面的SQL语句有错吗?实现了什么功能?语句有错吗?实现了什么功能? 上述语句可以用下面的联接替换吗?上述语句可以用下面的联接替换吗? 可可 以以 SELECT * FROM Student WHERE StudentNo IN SELECT Student.* FROM Student INNER JOIN Result ON Student.StudentNo=Result.StudentNo(SELECT * FROM Result)(SELECT StudentNo FROM Result)回顾与作业点评3-2下列
2、语句实现了什么功能?下列语句实现了什么功能?上述语句可以用下面的联接替换吗?上述语句可以用下面的联接替换吗? 查看没有参加考试的学生查看没有参加考试的学生 有的子查询不有的子查询不能用联接替换。这就是典型的例子能用联接替换。这就是典型的例子SELECT * FROM Student WHERE StudentNo NOT IN ( SELECT StudentNo FROM Result ) SELECT * FROM Student INNER JOIN Result ON Student.StudentNoResult.StudentNo 不可以不可以回顾与作业点评3-3下列语句实现了什么
3、功能?下列语句实现了什么功能? 请使用请使用IN子查询改写上述语句?子查询改写上述语句?请使用联接查询改写上述语句请使用联接查询改写上述语句SELECT * FROM Student WHERE StudentNo IN (SELECT StudentNo FROM Result)SELECT * FROM Student INNER JOIN ResultON Student.StudentNo = Result.StudentNoSELECT * FROM Student WHERE EXISTS ( SELECT * FROM Result WHERE StudentNo = Stude
4、nt.StudentNo ) 查询参加考试的学生查询参加考试的学生预习检查T-SQL语句如何提交一个事务?语句如何提交一个事务?事务具有的四个特性是什么?事务具有的四个特性是什么?视图是虚拟表吗?视图是虚拟表吗?索引的作用是什么?索引的作用是什么?本章任务模拟实现银行转帐功能模拟实现银行转帐功能批量插入学生考试成绩批量插入学生考试成绩办理毕业学生离校手续办理毕业学生离校手续查看学生成绩查看学生成绩查看学生档案查看学生档案本章目标使用事务保证操纵数据的完整性使用事务保证操纵数据的完整性掌握如何创建并使用视图掌握如何创建并使用视图为什么需要事务5-1银行转账问题:银行转账问题: 假定资金从账户假定
5、资金从账户A转到账户转到账户B,至少需要两步:,至少需要两步:账户账户A的资金减少的资金减少然后账户然后账户B的资金相应增加的资金相应增加账户账户A账户账户B假定张三的账户直接转账假定张三的账户直接转账1000元到李四的账户元到李四的账户为什么需要事务5-2CREATE TABLE bank( customerName CHAR(10), -顾客姓名顾客姓名 currentMoney MONEY -当前余额当前余额)GOALTER TABLE bank ADD CONSTRAINT CK_currentMoney CHECK(currentMoney = 1)GOINSERT INTO ban
6、k(customerName, currentMoney) VALUES(张三张三, 1000)INSERT INTO bank(customerName, currentMoney) VALUES(李四李四, 1)创建账户表,存放用户的账户信息创建账户表,存放用户的账户信息添加约束:根据银行规定,账户余添加约束:根据银行规定,账户余额不能少于额不能少于1元,否则视为销户元,否则视为销户 张三开户,开户金额为张三开户,开户金额为1000元元 ;李四开户,开户金额;李四开户,开户金额1元元 为什么需要事务5-3目前两个账户的余额总和为:目前两个账户的余额总和为:1000+1=1001元元 为什么
7、需要事务5-4模拟实现转账模拟实现转账从张三的账户转账从张三的账户转账1000元到李四的账户元到李四的账户/*-转账测试:张三转账转账测试:张三转账1000元给李四元给李四-*/-我们可能会这样编写语句我们可能会这样编写语句-张三的账户少张三的账户少1000元,李四的账户多元,李四的账户多1000元元UPDATE bank SET currentMoney = currentMoney - 1000 WHERE customerName = 张三张三UPDATE bank SET currentMoney = currentMoney + 1000 WHERE customerName = 李
8、四李四GO-再次查看转账后的结果再次查看转账后的结果 SELECT * FROM bankGO请问:请问:执行转账语句后,张三、李四的账户执行转账语句后,张三、李四的账户余额分别是多少?余额分别是多少?张三的账户没有减少张三的账户没有减少 但李四的账户却多了但李四的账户却多了1000元元 100010012001元元总额多出了总额多出了1000元!元!为什么需要事务5-5-张三的账户减少张三的账户减少1000元,李四的账户增加元,李四的账户增加1000元元UPDATE bank SET currentMoney=currentMoney-1000 WHERE customerName=张三张三
9、UPDATE bank SET currentMoney=currentMoney+1000 WHERE customerName=李四李四GO发生错误的原因发生错误的原因执行失败,张三账户余额还是执行失败,张三账户余额还是1000元元继续往下执行:执行成功,李四账户余额变为继续往下执行:执行成功,李四账户余额变为1001元元如何解决呢?使用如何解决呢?使用事务事务UPDATE语句违反约束:语句违反约束:余额余额=1元元什么是事务事务事务(TRANSACTION)是作为单个逻辑工作单元是作为单个逻辑工作单元执行的一系列操作执行的一系列操作多个操作作为一个整体向系统提交,要么都执行、多个操作作为
10、一个整体向系统提交,要么都执行、要么都不执行要么都不执行 事务是一个不可分割的工作逻辑单元事务是一个不可分割的工作逻辑单元 转账过程就是一个事务转账过程就是一个事务它需要两条它需要两条UPDATE语句来完成,这两条语句是一个整体语句来完成,这两条语句是一个整体如果其中任一条出现错误,则整个转账业务也应取消,两个账户中的如果其中任一条出现错误,则整个转账业务也应取消,两个账户中的余额应恢复到原来的数据,从而确保转账前和转账后的余额不变,即余额应恢复到原来的数据,从而确保转账前和转账后的余额不变,即都是都是1001元元事务的特性事务必须具备以下四个属性,简称事务必须具备以下四个属性,简称ACID
11、属性:属性:原子性(原子性(Atomicity)一致性(一致性(Consistency)隔离性隔离性(Isolation)永久性(永久性(Durability)事务是一个完整的操作事务是一个完整的操作事务的各步操作是不可分的(原事务的各步操作是不可分的(原子的);要么都执行,要么都不子的);要么都执行,要么都不执行执行当事务完成时,数据必须处于一当事务完成时,数据必须处于一致状态致状态并发事务之间彼此隔离、独立,并发事务之间彼此隔离、独立,它不应以任何方式依赖于或影响它不应以任何方式依赖于或影响其他事务其他事务事务完成后,它对数据库的修改事务完成后,它对数据库的修改被永久保持被永久保持如何创建
12、事务2-1使用使用SQL语句管理事务语句管理事务开始事务开始事务提交事务提交事务回滚(撤销)事务回滚(撤销)事务ROLLBACK TRANSACTIONCOMMIT TRANSACTIONBEGIN TRANSACTION如何创建事务2-2一旦事务提交或回滚,则事务结束一旦事务提交或回滚,则事务结束判断某条语句执行是否出错:判断某条语句执行是否出错:使用全局变量使用全局变量ERRORERROR只判断当前一条只判断当前一条T-SQL语句执行是否有错语句执行是否有错为了判断事务中所有为了判断事务中所有T-SQL语句是否有错,可以对错误语句是否有错,可以对错误进行累计进行累计 如:如:事务可以嵌套事
13、务可以嵌套SET errorSum=errorSum+ERROR事务分类显式事务显式事务用用BEGIN TRANSACTION明确指定事务的开始明确指定事务的开始最常用的事务类型最常用的事务类型隐性事务隐性事务通过设置通过设置SET IMPLICIT_TRANSACTIONS ON 语句,语句,将隐性事务模式设置为打开将隐性事务模式设置为打开其后的其后的T-SQL语句自动启动一个新事务语句自动启动一个新事务提交或回滚一个事务后,下一个提交或回滚一个事务后,下一个 T-SQL 语句又将启动语句又将启动一个新事务一个新事务自动提交事务自动提交事务SQL Server 的默认模式的默认模式每条单独的
14、每条单独的 T-SQL 语句视为一个事务语句视为一个事务BEGIN TRANSACTION /*-定义变量,用于累计事务执行过程中的错误定义变量,用于累计事务执行过程中的错误-*/DECLARE errorSum INT SET errorSum=0 -初始化为初始化为0,即无错误,即无错误/*-转账:张三的账户减少转账:张三的账户减少1000元,李四的账户增加元,李四的账户增加1000元元*/UPDATE bank SET currentMoney = currentMoney - 1000 WHERE customerName = 张三张三SET errorSum = errorSum +
15、 ERROR -累计是否有错误累计是否有错误UPDATE bank SET currentMoney = currentMoney + 1000 WHERE customerName = 李四李四SET errorSum = errorSum + ERROR使用事务解决银行转账问题4-1从张三的账户转出从张三的账户转出1000元,存入李四的账户中元,存入李四的账户中开始事务(指定事务从此处开始,后续开始事务(指定事务从此处开始,后续的的T-SQL语句都是一个整体)语句都是一个整体)累计是否有错误累计是否有错误IF errorSum0 -如果如果SQL语句执行出错语句执行出错 BEGIN PRI
16、NT 交易失败,回滚事务交易失败,回滚事务 ROLLBACK TRANSACTION END ELSE BEGIN PRINT 交易成功,提交事务,写入硬盘,永久的保存交易成功,提交事务,写入硬盘,永久的保存 COMMIT TRANSACTION ENDGOPRINT 查看转账事务后的余额查看转账事务后的余额SELECT * FROM bank GO 使用事务解决银行转账问题4-2根据执行是否有错误,决定根据执行是否有错误,决定提交事务,或撤销事务提交事务,或撤销事务如果有错,则回滚操作,事务结束如果有错,则回滚操作,事务结束如果成功,则提交操作,事务结束如果成功,则提交操作,事务结束从张三的
17、账户转出从张三的账户转出1000元,存入李四的账户中元,存入李四的账户中使用事务解决银行转账问题4-3转账事务前转账事务前转账事务过程中转账事务过程中转账事务结束后转账事务结束后转账转账1000元,转账失败的情况元,转账失败的情况演示案例演示案例1:利用事务实现转账:利用事务实现转账1000元元使用事务解决银行转账问题4-4转账事务前转账事务前转账事务过程中转账事务过程中转账事务结束后转账事务结束后转账转账800元,转账成功的情况元,转账成功的情况演示案例演示案例2:利用事务实现转账:利用事务实现转账800元元指导批量插入学生考试成绩2-1训练要点:训练要点:使用事务向表中插入多条记录使用事务
18、向表中插入多条记录需求说明:需求说明:批量插入参加今天批量插入参加今天“Java Logic”课程考试的十名课程考试的十名学生成绩学生成绩如果输入的成绩大于如果输入的成绩大于100分,将违反约束分,将违反约束讲解需求说明讲解需求说明指导批量插入学生考试成绩2-2实现思路:实现思路:使用显式事务完成批量插入使用显式事务完成批量插入10个学生考试成绩的操个学生考试成绩的操作作使用全局变量使用全局变量ERROR判断插入操作是否成功判断插入操作是否成功使用使用IF语句判断语句判断ERROR值。如果插入成功,提值。如果插入成功,提交事务;否则回滚事务交事务;否则回滚事务BEGIN TRANSACTION
19、DECLARE errorSum INTSET errorSum=0/*-插入数据插入数据-*/ INSERT INTO Result(StudentNo,SubjectNo,ExamDate,StudentResult) VALUES(10012,1,2009-5-20,102) -分数违反约束分数违反约束SET errorSum=errorSum+ERROR IF(errorSum0) -如果有错误如果有错误 BEGIN PRINT 插入失败,回滚事务插入失败,回滚事务 ROLLBACK TRANSACTION END ELSE BEGIN PRINT 插入成功,提交事务插入成功,提交事务
20、 COMMIT TRANSACTION END完成时间:完成时间:20分钟分钟练习办理毕业学生离校手续需求说明:需求说明:将毕业学生的基本信息和考试成绩分别保存到历史将毕业学生的基本信息和考试成绩分别保存到历史表中表中提示:提示:使用显式事务使用显式事务查询查询Result表中所有表中所有三年级学生的考试成绩,保存三年级学生的考试成绩,保存到表到表HistoreResult中中删除删除Result表中所有表中所有三年级学生的考试成绩三年级学生的考试成绩查询查询Student表中所有表中所有三年级的学生记录,保存到三年级的学生记录,保存到表表HistoryStudent中中删除删除Studet表
21、中所有表中所有三年级学生记录三年级学生记录完成时间:完成时间:20分钟分钟BEGIN TRANSACTIONDECLARE errorSum INTSET errorSum=0/*-查询查询Result表中所有表中所有三年级学生的考试成绩三年级学生的考试成绩,保存到新表,保存到新表HistoreResult*/SELECT Result.* INTO HistoreResult FROM Result INNER JOIN Student ON Result.StudentNo=Student.StudentNoINNER JOIN Grade ON Grade.GradeId=Student
22、.GradeId WHERE GradeName=三三年级年级SET errorSum=errorSumERROR/*-删除删除Result表中所有表中所有三年级学生的考试成绩三年级学生的考试成绩*/DELETE Result FROM Result JOIN Student ON Result.StudentNo=Student.StudentNoINNER JOIN Grade ON Grade.GradeId=Student.GradeId WHERE GradeName=三年级三年级SET errorSum=errorSum+ERROR/*-将将Student表中所有表中所有三年级的学
23、生记录三年级的学生记录,保存到新表,保存到新表HistoryStudent*/ /*-删除删除Studet表中所有表中所有三年级学生记录三年级学生记录*/ /*-根据是否有错误,确定事务是提交还是撤销根据是否有错误,确定事务是提交还是撤销-*/共性问题讲解n常见调试问题及解决办法常见调试问题及解决办法n代码规范问题代码规范问题共性问题集中讲解共性问题集中讲解为什么需要视图不同的人员关注不同的数据不同的人员关注不同的数据保证信息的安全性保证信息的安全性雇员雇员 ID姓名姓名薪金薪金职务职务绩效绩效E10004Ian Smith43000技术技术BE10005Ricky M.32000营销营销A
24、雇员数据库雇员数据库老板老板 出纳出纳 人力资源人力资源主管主管员工员工拒绝访问拒绝访问什么是视图3-1教师需要的视图:教师需要的视图:方便查看学生的成绩方便查看学生的成绩CREATE VIEW vw_Student_Result AS SELECT 姓名姓名=stuName, 学号学号=Student.StudentNo, 基于学生信息表和基于学生信息表和成绩表创建视图成绩表创建视图班主任需要的视图:班主任需要的视图:方便查看学生的档案方便查看学生的档案什么是视图3-2视图是一视图是一张张虚拟表虚拟表,表示一张表的部分数据或多张表的综合数据表示一张表的部分数据或多张表的综合数据其结构和数据是
25、建立在对表的查询基础上其结构和数据是建立在对表的查询基础上视图中不存放数据视图中不存放数据数据存放在视图所引用的原始表中数据存放在视图所引用的原始表中一个原始表,根据不同用户的不同需求,可以一个原始表,根据不同用户的不同需求,可以创建不同的创建不同的视图视图什么是视图3-3视图的用途视图的用途筛选表筛选表中中的行的行防止未经许可的用户访问敏感数据防止未经许可的用户访问敏感数据降低数据库的复杂程度降低数据库的复杂程度将将多个多个物理数据库抽象为一个逻辑数据库物理数据库抽象为一个逻辑数据库如何创建视图3-1使用管理器创建视图:名称:使用管理器创建视图:名称:vw_Student_Resultvw_
26、Student_Result操作演示:使用管理器创建视图操作演示:使用管理器创建视图如何创建视图3-2使用使用T-SQL语句创建视图语句创建视图CREATE VIEW view_name AS 使用使用T-SQL语句删除视图语句删除视图IF EXISTS (SELECT * FROM sysobjects WHERE name = view_name) DROP VIEW view_name 使用使用T-SQL语句查看视图语句查看视图SELECT * FROM view_name 需要使用一对需要使用一对单引号括起单引号括起如何创建视图3-3创建方便创建方便教师教师查看成绩的视图查看成绩的视图
27、IF EXISTS (SELECT * FROM sysobjects WHERE name=vw_student_result ) DROP VIEW vw_student_resultGOCREATE VIEW vw_student_resultAS GOSELECT * FROM vw_student_result检测是否存在检测是否存在创建视图创建视图查看视图查看视图删除视图删除视图演示案例演示案例3:使用:使用SQL创建、执行视图创建、执行视图使用视图注意事项视图中可以使用多个表视图中可以使用多个表一个视图可以嵌套另一个视图一个视图可以嵌套另一个视图 视图定义中的视图定义中的 SEL
28、ECT 语句不能包括下列内容:语句不能包括下列内容: ORDER BY 子句,除非在子句,除非在 SELECT 语句的选择列语句的选择列表中也有一个表中也有一个 TOP 子句子句INTO 关键字关键字引用临时表或表变量引用临时表或表变量 指导查看学生各学期总成绩2-1训练要点:训练要点:使用视图获取多表中数据使用视图获取多表中数据需求说明:需求说明:统计每个学生各学期(大一、大二、大三)所有课统计每个学生各学期(大一、大二、大三)所有课程的总成绩程的总成绩讲解需求说明讲解需求说明指导查看学生各学期总成绩2-2实现思路:实现思路:创建视图创建视图编写代码查询每个学生各学期参加考试的总成绩,编写代
29、码查询每个学生各学期参加考试的总成绩,每门课成绩以该生参加的最后一次考试为准每门课成绩以该生参加的最后一次考试为准编译执行视图,获得学生各学期的总成绩编译执行视图,获得学生各学期的总成绩CREATE VIEW vw_student_result_infoAS SELECT 姓名姓名=StudentName,学号学号=Student.StudentNo, 联系电话联系电话=Phone,学期学期=GradeName,成绩成绩=Total FROM Student LEFT OUTER JOIN ( SELECT r.StudentNo,GradeName,SUM(StudentResult) To
30、tal FROM Result r INNER JOIN ( SELECT StudentNo,SubjectNo,MAX(ExamDate) ExamDate FROM Result GROUP BY StudentNo,SubjectNo) tmp ON r.ExamDate=tmp.ExamDate AND r.SubjectNo = tmp.SubjectNo AND r.StudentNo = tmp.StudentNo INNER JOIN Subject sub ON sub.SubjectNo = r.SubjectNo INNER JOIN Grade g ON g.Grad
31、eId = sub.GradeId GROUP By r.StudentNo,GradeName ) TmpResult2 ON Student.StudentNo = TmpResult2.StudentNo GROUP BY StudentName,Student.StudentNo,Phone,GradeName,TotalGOSELECT * FROM vw_student_result_info完成时间:完成时间:20分钟分钟SQL Server的安全模型数据库数据库 1数据库数据库 2数据库数据库 3表表 1表表 2表表 1表表 2表表 1表表 2增删增删改查改查增删增删改查改查增
32、删增删改查改查增删增删改查改查增删增删改查改查增删增删改查改查数据库用户数据库用户数据库用户数据库用户数据库用户数据库用户登录帐号登录帐号SQLserver三层安全管理三层安全管理登录方式登录验证有两种方式:登录验证有两种方式:SQL身份验证:适合于非身份验证:适合于非windows平台的用户或平台的用户或Internet用户,用户, 需要提供帐户和密码需要提供帐户和密码Windows身份验证:适合于身份验证:适合于windows平台用户,不需平台用户,不需要提供密码,和要提供密码,和windows集成验证集成验证登录帐户相应有两种:登录帐户相应有两种:SQL 帐户帐户和和Windows帐户帐
33、户 创建登录添加添加 Windows登录帐户登录帐户 EXEC sp_grantlogin jbtrainingS26301 添加添加 SQL登录帐户登录帐户 EXEC sp_addlogin zhangsan, 1234演示创建登录演示创建登录EXEC表示调用存储过程,表示调用存储过程,存储过程类似存储过程类似C语言的函数语言的函数内置的系统管理员内置的系统管理员 帐户帐户sa密码默认为空,建议修改密码密码默认为空,建议修改密码 域名域名用户名用户名用户名用户名,密码密码创建登录创建数据库用户创建数据库用户需要调用系统存储过程创建数据库用户需要调用系统存储过程sp_grantdbaccess
34、sp_grantdbaccess,其用法为:,其用法为:EXEC sp_grantdbaccess 登录帐户名登录帐户名,数据库用户名数据库用户名 其中,其中,“数据库用户数据库用户“为可选参数,默认为登录帐户,为可选参数,默认为登录帐户,即数据库用户默认和登录帐户同名。即数据库用户默认和登录帐户同名。USE stuDBGOEXEC sp_grantdbaccess jbtrainingS26301, S26301DBUser EXEC sp_grantdbaccess zhangsan, zhangsanDBUser在在stuDB数据库中添加两个用户数据库中添加两个用户创建数据库用户系统内置
35、的数据库用户系统内置的数据库用户dbo 用户用户表示数据库的所有者(表示数据库的所有者(DB Owner)无法删除无法删除 dbo 用户,此用户始终出现在每个数据库中用户,此用户始终出现在每个数据库中 guest 用户用户适用于没有数据库用户的登录帐号访问适用于没有数据库用户的登录帐号访问每个数据库可有也可删除每个数据库可有也可删除向数据库用户授权 EmployeesEmployeeID123LastNameDavolioFullerLeverling FirstName NancyAndrewJanetReportsTo22 .delete FROM EmployeesSELECT * FR
36、OM Employees权限的类型授权的语法为:授权的语法为:GRANT 权限权限 ON 表名表名 TO 数据库用户数据库用户USE stuDBGO/*-为为zhangsanDBUser分配对表分配对表stuInfo的的select, insert, update权限权限-*/GRANT select, insert, update ON stuInfo TO zhangsanDBUser /*-为为S26301DBUser分配建表的权限分配建表的权限-*/GRANT create table TO S26301DBUser权限的类型没有授予没有授予delete权限权限共性问题讲解n常见调试问
37、题及解决办法常见调试问题及解决办法n代码规范问题代码规范问题共性问题集中讲解共性问题集中讲解什么是索引3-1汉语字典中的汉字按汉语字典中的汉字按页页存放,一般都有汉语拼存放,一般都有汉语拼音目录(音目录(索引索引)、偏旁部首目录等)、偏旁部首目录等我们可以根据拼音或偏旁部首,我们可以根据拼音或偏旁部首,快速快速查找某个查找某个字词字词什么是索引3-2Indexes Use Key Values to Locate Data(根据索引键查找定位数据行)(根据索引键查找定位数据行) Data Pages(数据页)(数据页)Index Pages(索引页)(索引页) 什么是索引3-3SQL Serv
38、er中的数据也是按页存放中的数据也是按页存放索引:是索引:是SQL Server编排数据的内部方法。它编排数据的内部方法。它为为SQL Server提供一种方法来编排查询数据提供一种方法来编排查询数据 索引页:数据库中存储索引的数据页;索引页索引页:数据库中存储索引的数据页;索引页类似于汉语字(词)典中按拼音或笔画排序的类似于汉语字(词)典中按拼音或笔画排序的目录页目录页索引的作用:通过使用索引,可以大大提高数索引的作用:通过使用索引,可以大大提高数据库的检索速度,改善数据库性能据库的检索速度,改善数据库性能索引类型唯一索引:唯一索引不允许两行具有相同的索引唯一索引:唯一索引不允许两行具有相同
39、的索引值值主键索引:为表定义一个主键将自动创建主键索主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的,并且不能为空要求主键中的每个值是唯一的,并且不能为空聚集索引聚集索引(Clustered):表中各行的物理顺序与键:表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个值的逻辑(索引)顺序相同,每个表只能有一个非聚集索引非聚集索引(Non-clustered):非聚集索引指定表:非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在的逻辑顺序。数据存储在一个位置,索引存储在另
40、一个位置,索引中包含指向数据存储位置的指另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于针。可以有多个,小于249个个如何创建索引3-1使用使用SQL Server Management Studio创建索创建索引引操作演示:使用操作演示:使用SQLServ管理器创建索引管理器创建索引如何创建索引3-2使用使用T-SQL语句创建索引语句创建索引CREATE UNIQUE CLUSTERED|NONCLUSTERED INDEX index_name ON table_name (column_name) WITH FILLFACTOR=x唯一索引唯一索引聚集索引或非聚集索引聚集索
41、引或非聚集索引填充因子(系数)填充因子(系数):指定一个指定一个0100之之间的值,表示索引页填充的百分比间的值,表示索引页填充的百分比使用使用T-SQL语句删除索引语句删除索引DROP INDEX table_name.index_name 删除表时,该表的所有索引同时会被删除删除表时,该表的所有索引同时会被删除 表名和索引名称之间,用表名和索引名称之间,用“.”分隔分隔如何创建索引3-3在在Student表的表的StudentName列创建非聚集索列创建非聚集索引引USE MySchoolGO/*-检测是否存在该索引检测是否存在该索引(索引存放在系统表索引存放在系统表sysindexes中
42、中)-*/IF EXISTS (SELECT name FROM sysindexes WHERE name = IX_Student_StudentName)DROP INDEX Student.IX_Student_StudentName -删除索引删除索引GO/*-学生姓名列创建非聚集索引:填充因子为学生姓名列创建非聚集索引:填充因子为30-*/CREATE NONCLUSTERED INDEX IX_Student_StudentName ON Student(StudentName) WITH FILLFACTOR = 30GO检测索引是否存在:检测索引是否存在:索引存放在系统表索引
43、存放在系统表sysindexes中中演示示例演示示例4:使用:使用T-SQL创建索引创建索引按指定的索引查询数据使用索引查询使用索引查询“李李”姓的学生信息姓的学生信息/*-指定按索引:指定按索引:IX_Student_StudentName查询查询-*/SELECT * FROM StudentWITH (INDEX=IX_Student_StudentName)WHERE StudentName LIKE 李李%演示示例演示示例5:使用索引查询数据:使用索引查询数据索引的优缺点优点优点加快访问速度加快访问速度加强行的唯一性加强行的唯一性缺点缺点带索引的表在数据库中需要更多的存储空间带索引的
44、表在数据库中需要更多的存储空间操纵数据的命令需要更长的处理时间,因为它们需要操纵数据的命令需要更长的处理时间,因为它们需要对索引进行更新对索引进行更新创建索引的指导原则按照下列标准选择建立索引的列按照下列标准选择建立索引的列频繁搜索的列频繁搜索的列经常用作查询选择的列经常用作查询选择的列经常排序、分组的列经常排序、分组的列经常用作联接的列(主键经常用作联接的列(主键/外键)外键)请不要使用下面的列创建索引请不要使用下面的列创建索引仅包含几个不同值的列仅包含几个不同值的列表中仅包含几行表中仅包含几行使用索引时注意事项查询时减少使用查询时减少使用*返回全部列,不要返回不需要返回全部列,不要返回不需要的列的列索引应该尽量小,在字节数小的列上建立索引索引应该尽量小,在字节数小的列上建立索引WHERE子句中有多个条件表达式时,包含索引子句中有多个条件表达式时,包含索引列的表达式应置于其他条件表达式之前列的表达式应置于其他条件表达式之前避免在避免在ORDER BY子句中使用表达式子句中使用表达式根据业务数据发生频率,定期重新生成或重新根据业务数据发生频率,定期重新生成或重新组织索引,进行碎片整理组织索引,进行碎片整理 查看索引 使用系统存储过程使用系统
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 武松相关课件内容
- 高端住宅小区车位购置违约责任及赔偿规范合同
- 车库租赁及停车场智能化升级合同范本
- 高新技术产业园区厂房废品处理押金合同范本
- 餐厅特色美食体验活动合作协议
- 离婚双方共同子女抚养及财产分割协议范本
- 房地产开发贷款担保合同模板
- 成都市二手房买卖合同违约金计算与支付规范文本
- 教育项目财务担保合同会计核算与教育资金管理
- 车辆租赁合同终止及二手车交易协议
- 销售管理实际运用PDCA循环课件
- 社区老旧小区提升改造方案
- 变电站施工管理制度
- 铁路行李包裹运输-行包托运与承运业务办理
- 《-宽容让生活更美好》
- 辽宁省住房制度改革的实施方案
- (完整word版)通讯录标准模板
- 中国文化遗产资料长城100字
- 指针式万用表的使用方法演示幻灯片
- 下肢深静脉血栓试题
- 2023年山东省春季高考语文模拟卷试题及答案(含答题卡)
评论
0/150
提交评论