? sql语句大全之索引、视图、存储过程和触发器的 亚博足球娱乐场注册,亚博娱乐全天彩,亚博官网赢钱不给
VB.net 2010 视频亚博足球娱乐场注册--任意三数字加yabo.com直达官网 VB.net 2010 视频亚博足球娱乐场注册--任意三数字加yabo.com直达官网 VB.net 2010 视频亚博足球娱乐场注册--任意三数字加yabo.com直达官网
SQL Server 2008 视频亚博足球娱乐场注册--任意三数字加yabo.com直达官网 c#入门经典亚博足球娱乐场注册--任意三数字加yabo.com直达官网 Visual Basic从门到精通视频亚博足球娱乐场注册--任意三数字加yabo.com直达官网
当前位置:
首页 > 数据库 > sql语句 >
  • sql语句大全之索引、视图、存储过程和触发器的

  • 2019-04-29 22:33 来源:未知

实验案例一:验证索引的作用

1、首先创建一个数据量大的表,名称为“学生表”,分别有三列,学号,姓名和班级,如下图所示,学号为自动编号,班级为默认值“一班”。

2、向表中插入大量数据,数据越多,验证索引的效果越好。

使用语句完成:While 1>0? Insert into?学生表(姓名)? values(‘于美丽’)

上面语句是一个死循环,除非强制结束,如果1大于0就会一直向表中插入姓名

如下图所示:

等待5分钟左右,打开表的属性,查看表的行数,当前为1032363,如下图所示:

3、?使用语句查询第900000行的数据,Select * from?学生表?Where?学号=900000

4、打开“sql server profiler?”工具进行跟踪,如下图所示:

打开“sql server profiler?”工具查看跟踪的信息,发现查询时间很长,cpu工作了265毫秒,reads:读了8649次,writes:写了10次,duration:总计花费2336毫秒完成查询。

为了下面分析文件更准确,多执行几次Select* from?学生表?Where?学号=900000

然后把跟踪的结果保存在桌面上:

?

5、打开“数据库引擎优化顾问”,添加跟踪文件,进行分析,发现索引建议,需要建立索引。

?

注意选择benet数据库中的学生表,然后点击“开始分析”

?

索引类型为clusterd(聚集索引),索引列为“学号”。

6、按照“数据库引擎优化顾问”的索引建议建立聚集索引,并且选择“唯一”

7、再次执行Select * from?学生表Where?学号=900000

?

8、打开sql server profiler查看跟踪的时间,发现查询时间大幅提升,说明索引可以提高查询速度。

发现总计时间为1毫秒,几乎忽略不计

?

实验案例二:分别练习创建各种索引

1、创建聚集索引

目前tstudent表中没有任何索引也没有主键

?

为tstudent表创建聚集索引

选中studentID,单击左上侧的主键按钮

?

为Tstuden表的studentID创建主键就同时创建了聚集索引

2、创建组合索引

为成绩表创建组合索引,因为一个学生不能为一门学科录入两次成绩,所以将成绩表中的studentID和subjectID创建组合索引

?

解决办法:

菜单栏----工具----选项

找到设计器(designers),将标记处的勾去掉,单击“确定”

?

这样组合索引就创建成功了。

?

3、创建唯一索引

创建唯一性约束的时候就会创建唯一性索引,不能有重复值

为Tstudent表创建唯一非聚集索引

create?unique?nonclustered?index?U_cardID?on?TStudent(cardID)

4、创建非聚集索引---可以有重复值

为Tstudent表的姓名列创建非聚集索引

使用命令查看表上的索引

Select?*?from?sys.sysindexes?where?id=(select?object_id?from?sys.all_objects?where?name='Tstudent')

Indid中1代表聚集索引

Indid中2代表唯一非聚集索引

Indidz中3代表非聚集索引

使用sp_help? Tstudent也可以查看到相关表的信息

实验案例三:创建视图

方法一:在图形界面下创建视图(以Myschool数据库为例)

创建一个视图,分别来自三个的表的三个列,并重命名列,生成的视图名为student_info,如下图所示:

?

通过查询语句查看视图:select?? *??? from??student_info

?

方法二:使用语句创建视图(以schoolDB数据库为例)

进行数据库设计的时候,一个表有很多列,我们可以在表上创建视图,只显示指定的列。

Select语句可以作为一个视图

select?Sname,sex,Class?from?dbo.TStudent?where?Class='网络班'

1、创建视图,筛选行和列

create?view?netstudent

as

select?Sname,sex,Class?from?dbo.TStudent?where?Class='网络班'

从视图中查找数据:

select?*?from?netstudent?where?sex='男'

创建视图,更改列的表头,计算列,产生计算列

selectStudentID,Sname,sex,cardID,Birthday,Email,Class

from?dbo.TStudent

2、创建视图,更改列的表头

create?view?V_Tstudent1

as

select?StudentID??学号,Sname姓名,sex??性别,cardID??身份证号码,Birthday??生日,Class??班级?from?dbo.TStudent

?

select?*?from?V_Tstudent1

?

以后再去查询的时候就非常方便了。

?

实验案例四:存储过程

1、常用的系统存储过程

exec?sp_databases????? --列出当前系统中的数据库

exec?sp_renamedb? 'mybank','bank'?? --改变数据库名称(单用户访问)

use?MySchool

go

exec sp_tables????? ?????????????????--当前数据库中可查询对象的列表

exec sp_columns student??????????? --查看表student中列的信息

exec?sp_help student?????????????? --查看表student的所有信息

exec sp_helpconstraint student?????? --查看表student表的约束

exec sp_helptext view_student_result?? --查看视图的语句文本

exec sp_stored_procedures????? --返回当前数据库中的存储过程列表

?

?

2、常用的扩展存储过程(在C盘下创建一个文件夹bank

exec?xp_cmdshell? 'mkdir? c:\bank',no_output? --创建文件夹c:\bank

exec?xp_cmdshell? 'dir c:\bank\'?????????????? --查看文件

如果执行不了上面的语句,请开启下面的功能。然后再次执行上面的两条语句。

?

若xp_cmdshell作为服务器安全配置的一部分而被关闭,请使用如下语句启用:

exec sp_configure? 'show advanced options', 1?? --显示高级配置选项(单引号中的只能一个空格隔开)

go

reconfigure??????????????????????????????????? --重新配置

go

exec sp_configure? 'xp_cmdshell',1???????????????? --打开xp_cmdshell选项

go

reconfigure?????????????????????????? ?????????--重新配置

go

?

?

3、用户自定义的存储过程(以schoolDB数据库为例,计算网络管理专业的平均分)

use schoolDB

go

if exists ?(select?*? from? sysobjects where name='usp_getaverageresult')

drop ?procedure ?usp_getaverageresult

go

create ?procedure ?usp_getaverageresult

as

declare ?@subjectid ?nvarchar(4)

select?@subjectid=subjectid? from? dbo.TSubject where subJectName='网络管理'

declare ?@avg decimal (18,2)

select ?@avg=AVG(mark)?from ?dbo.TScore wheresubJectID=@subjectid

print?'网络管理专业平均分是:'+convert(varchar(5),@avg)

go

exec?usp_getaverageresult

?

实验案例五:触发器

?

(Myschool数据库为例)

创建触发器(禁止修改admin表中数据):

create?trigger? reminder

on ?admin

for?update

as

print?'禁止修改,请联系DBA'

rollback?transaction

go

?

执行语句,查看错误信息:

update Admin set? LoginPwd='123'? where?LoginId='benet'

select?*? from? Admin

?

实验案例六:创建触发器

(Myschool数据库为例)

要求:创建一个触发器,以确保student表中的数据不会被删除。

create? trigger?stu_del

on ?student

for? delete

as

print ??'你不具备删除管理员信息的权限'

rollback? transaction

go

?

执行一条delete语句,测试结果。

delete?? from? Student?where? StudentName='喜洋洋

?
文章参考微信公众号:L宝宝聊IT
作者:L宝宝
出处:http://www.cnblogs.com/L2366/

-------------------------------------------

个性签名:千里之行,始于足下


相关亚博足球娱乐场注册--任意三数字加yabo.com直达官网