索引、視圖、存儲過程和觸發器的應用

来源:https://www.cnblogs.com/L2366/archive/2018/06/06/9146941.html
-Advertisement-
Play Games

實驗案例一:驗證索引的作用 1、首先創建一個數據量大的表,名稱為“學生表”,分別有三列,學號,姓名和班級,如下圖所示,學號為自動編號,班級為預設值“一班”。 2、向表中插入大量數據,數據越多,驗證索引的效果越好。 使用語句完成:While 1>0 Insert into 學生表(姓名) values ...


實驗案例一:驗證索引的作用

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
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 官網配置步驟:https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce-1 安裝Docker社區版倉庫 Update the apt package index: $ sudo apt-get update $ ...
  • 原文地址:https://www.cnblogs.com/memento/p/9148721.html準備說明:jdk:jdk-8u161-windows-x64.exehadoop:hadoop-2.7.5.tar.gzOS:Window 10一、JDK 安裝配置詳見:JDK 環境配置(圖文)二、... ...
  • --PL/SQL語言(procedure language 過程化語言) --1.聲明類型 declare k number; m number default 20; --Character String buffer too small問題 --pname varchar2(4); --所以更換... ...
  • 索引類似大學圖書館建書目索引,可以提高數據檢索的效率,降低資料庫的IO成本。MySQL在300萬條記錄左右性能開始逐漸下降,雖然官方文檔說500~800w記錄,所以大數據量建立索引是非常有必要的。MySQL提供了Explain,用於顯示SQL執行的詳細信息,可以進行索引的優化。 一、導致SQL執行慢 ...
  • Redis主要數據結構:簡單動態字元串(SDS)、雙端鏈表、字典、跳躍表、整數集合、壓縮列表和快速列表; 一、簡單動態字元串(SDS): Redis沒有直接使用C語言中的傳統的位元組數組保存字元串,而是自行構建了簡單動態字元串(SDS),C字元串只是作為簡單動態字元串(SDS)的字面量,用於在無需對字 ...
  • 1、資料庫簡介-》解決的問題:持久化存儲,優化讀寫,保證數據的有效性-》關係型資料庫: 基於E-R模型(數據關係模型) 使用sql語言進行操作-》分類:文檔型sqlite,服務型-》資料庫設計 三範式:列不可拆分,唯一標識,引用主鍵 關係及存儲: 1對1:1個對象A對應著1個對象B,1個對象B對應著 ...
  • 原本以為 正則表達式裡面的特殊\d匹配數字放到sql語句裡面也是適用的,沒想到一直不匹配。但是放到編程語言java或者js裡面又匹配。看了一下原來sql對正則的支持沒有那麼全面。一定要用[0-9]代表數字。原因的話我猜是sql是一門查詢語言,設計原則不應該有和編程語言靠近的東西 ...
  • 第1章 初探大數據 本章將介紹為什麼要學習大數據、如何學好大數據、如何快速轉型大數據崗位、本項目實戰課程的內容安排、本項目實戰課程的前置內容介紹、開發環境介紹。同時為大家介紹項目中涉及的Hadoop、Hive相關的知識 第2章 Spark及其生態圈概述 Spark作為近幾年最火爆的大數據處理技術,是 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...