數據庫索引,存儲過程,視圖,事務

 一,索引
索引是一個獨立的,物理的數據庫結構,可以快速找到表或視圖的信息
通常情況下只有需要經常查詢索引列中的數據時纔在表上創建索引
基本語法:
CREATE INDEX StockIndex
ON appSchema.StockEvents (StockSymbol);
創建唯一索引:
Create unique index 索引名稱
On 表名(字段1,字段2)
聚集索引:clustered 每個鍵值只有一個聚集索引
非聚集索引noclustered:索引的鍵值包含指向表中記錄存儲位置的指針,不對錶中數據排序
聚集索引的創建:
Create unique clustered  index 索引名稱
On 表名(字段名 DESC)
非聚集函數:
Create unique nonclustered  index 索引名稱
On 表名(字段名)
兩種非聚集索引:建於堆上和建於聚集索引上
查詢索引:exec sp_helpindex 表名
刪除索引:drop index 表名.索引名
二,視圖:
視圖是一種邏輯對象,它是從一個或幾個基本表中導出來的表,是一種虛擬表。
視圖的內容可以是:1,基表中列的子集或行的子集 2,兩個或多個基表的聯合 3,基表的統計彙總 4,其他視圖的子集 5,視圖和基表的混合
視圖定義的限制:1, create view語句不能包括compute或comprte by子句,也不能包括into關鍵字 2,僅當使用top關鍵字時,create view語句才能包括order by子句
3,視圖不能引用臨時表 4,視圖不能引用超過1024列 5,在單一批處理中create view語句不能和其他t—sql語句組合使用
創建視圖:
create view v_uservip
as
select [user].userid,[user].username,vipid,vipdate from [user] join vip
on [user].userid=vip.userid
更改視圖:
alter view v_uservip
as
select [user].userid,sex,[user].username,vipid,vipdate from [user] join vip
on [user].userid=vip.userid
刪除視圖
drop view dbo.v_uservip
使用索引視圖
1, 視圖上創建的第一個索引必須是唯一聚集索引2, 創建視圖時必須使用schemabinging選項 3,視圖可以引用基表,但不能引用其他視圖4,引用表和用戶定義函數的時候,必須使用兩部分名稱 5,隨後使用索引圖的連接必須具有相同的選項設置。
2, 創建索引視圖的限制
視圖上創建的第一個索引必須是惟一聚集索引
創建視圖時必須使用 SCHEMABINDING 選項
視圖可以引用基表,但不能引用其他視圖
引用表和用戶定義函數的時候,必須使用兩部分名稱
隨後使用索引視圖的連接必須具有相同的選項設置
三,事務
事務可以自動提交或回滾,當事務中的一條語句不能執行則事務中的其他語句都不能執行
每條單獨的語句都是一個事務
begin transaction    事務的起始點
begin try
insert into stu values('Jack1',20,1)
insert into stu values('Jack2',2,1)
commit transaction  事務提交
end try
begin catch
print '錯誤'
rollback transaction   事務回滾
end catch
select * from stu
四,存儲過程
存儲過程是一組爲了完成特定功能的sql語句集,經編譯後存儲在數據庫中,存儲過程可包含程序流、邏輯以及對數據庫的查詢。他們可以接受參數、輸出參數、返回單個或多個結果集以及返回值
if……else語句
 use pubs

declare @pic float
select @pic=sum(price) from  titles
if @pic>500
begin
print 'more 500'
end
else
begin
print 'less 500'
end
case條件:
use northwind
go
select top 10 orderid,orderid %10 as 'Last Digit',Position=
Case orderid %10
 when 1 then 'First'
 when 2 then 'Second'
 when 3 then 'Third'
 when 4 then 'Fourth'
Else 'Something Else'
end
from orders
whil循環:
declare @i int
set @i=1
while @i<10
begin
print @i
set @i=@i+1
end
waitfor語句:
Waitfor
Delay  ‘01:00’  --等待一小時後執行
Print ‘SQL’

Waitfor
Time ’08:30’  --等待到8點30分執行操作
Pint ‘SQL’
創建有參數的存儲過程:
use pubs
go
create procedure MyPRO
@id varchar(11),
@contract bit,
@phone char(12) output
as
select @phone=phone from authors where au_id=@id and [contract]=@contract

--調用存儲過程
decla @phone char(12)
exec mypro '267-41-2394',true,@phone output
print @phone


sql中獲得隨機數的方法爲:newid()

對網上看到的compute和compute by例子的理解:
sqlserver中可以使用sum()和group by對查詢的字段進行分組並獲得總和,但是隻會返回總和而不能得到詳細信息,compute可以得到所有數據的詳細信息並在最後得到總和
USE pubs
SELECT type, price, advance
FROM titles
ORDER BY type
COMPUTE SUM(price), SUM(advance)
compute by只能與order by同時出現,按組把各個數據列出,並計算出各個組的和
USE pubs
SELECT type, price, advance
FROM titles
ORDER BY type
COMPUTE SUM(price), SUM(advance) BY type
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章