最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
VB.net 2010 視頻教程 VB.net 2010 視頻教程 VB.net 2010 視頻教程
SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
當前位置:
首頁 > 數據庫 > 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 [email protected]

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/

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

個性簽名:千里之行,始于足下


pk10赛车冠军技巧
最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
macd赚钱绝招 梦幻手游老区几级赚钱 怎么赚钱 英雄杀网页版 中国足球彩票 正新鸡排都赚钱吗 试玩站赚钱 手机三张牌 大嘴棋牌 官网