『壹』 12. 索引,游標,約束,存儲過程,觸發器的定義,用途和語法
1.索引是資料庫常用的一種方法,它的基本原理就是按照某一指定關鍵欄位進行排序後,生成一個索引文件,以便於查找定位,提高搜索速度。
主要用途是的高系統的性能,大大加快數據檢索的速度。
索引分為三類:聚集索引(CLUSTERED)和非聚集索引(NONCLUSTERED)。
語法:
CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX 索引名
ON {表名 | 視圖名} (列名[ASC|DESC] [,...n])
[WITH
[[,]FILLFACTOR=填充因子]
[[,]IGNORE_DUP_KEY]
[[,]DROP_EXISTING]
[[,]STATISTICS_NORECOMPUTE]
[[,]SORT_IN_TEMPDB]]
[ON filegroup]
2.游標的詳細說明你看下面的網頁吧:
http://www.yesky.com/imagesnew/software/tsql/ts_set-set_0vs5.htm
3.約束的話我只寫出其類型來吧,相信你應該懂的。
類型:1.NOT NULL指定不接受NULL值的列。
2.CHECK約束對可以放入列中的值進行限制,以強制執行域的完整性。
3.UNIQUE約束在列集內強制執行值的唯一性。
4.PRIMARY KEY約束標識列或列集,這些列或列集的值唯一標識表中的行
5.FOREIGN KEY約束標識表之間的關系
6.DEFAULT約束為列填入的默認值
4.存儲過程是一種資料庫對象,是為了實現某個特定任務,將一組預編譯的SQL語句以一個存儲單元的形式存儲在伺服器上,供用戶調用。
創建存儲過程語法:
CREATE PROC [EDURE] procere_name [;number]
[{@parameter data_type}
[VARYING] [=default] [OUTPUT]
][,...n]
[WITH
{RECOMPLE | ENCRYPTION | RECOMPLE,ENCRYPTION}]
[FOR REPLICATION]
as sql_statement [,...n]
執行存儲過程語法:
[[EXEC [UTE]]
{[@return_status=]
{procre_name [;number] | @procre_name_var}
[[@parameter=] {value | @variable [OUTPUT] | [DEFAULT]}
[,...n]
[WITH RECOMPLE]
5.觸發器是一種特殊類型的存儲過程,也是由T_SQL語句組成,可以完成存儲過程能完成的功能,但它與表緊密相連,可以看做表定義的一部分;它不可能通過名稱被直接調用,更不允許參數,而是當用戶對表中的數據進行修改時,自動執行;它可以用於SQL Server約束、默認值和規則的完整性檢查、實施更為復雜的數據完整性約束。
創建觸發器的語法:
CREATE TRIGGER trigger_name
ON {table | view}
[WITH ENCRYPTION]
{
{{FOR | AFTER | INSTEAD OF} {[INSERT] [,] [DELETE] [,] [UPDATE]}
[NOT FOR REPLICATION]
AS
[{IF UPDATE (column)
[{AND | OR} UPDATE (column)]
[,...n]
| IF(COLUMNS_UPDATED() {bitwise_operator} updated_bitmask)
(comparison_operator) column_bitmask [,...n]
}]
sql_statement [,...n]
}
}
如果覺得我回答的還可以,那可不可以幫我加分。(*^__^*) 嘻嘻……
『貳』 存儲過程的參數類型哪幾種
存儲過程共有IN、OUT、INOUT三種參數類型,格式如下:CREATEPROCEDURE(IN|OUT|INOUT參數名數據類型...)存儲過程可以沒有參數,但如果在使用過程需要用到參數,需按上面的格式進行定義。
第一項:IN|OUT|INOUT,表示參數的類型,選擇其中的一種即可;第二項:參數名,表示參數的名稱;第三項:數據類型,表示這個參數的數據類型,如int、float、double、varcahr等;第四項:「…」,表示參數可以定義多個,如果有多個參數時按前三項的格式定義即可,每個參數間用英文狀態下的逗號「
『叄』 存儲過程禁止空參數
默認情況下,參數可為空。如果傳遞 NULL 參數值並且該參數語句中使用,而該語句中引用的列又不允許使用 NULL,則 SQL Server 會產生一條錯誤信息。為了防止向不允許使用 NULL 的列傳遞 NULL 參數值,應向過程中添加編程邏輯或為該列使用默認值(使用 的 DEFAULT 關鍵字)。
『肆』 存儲過程寫法
CREATE PROCEDURE [擁有者.]存儲過程名[;程序編號]
[(參數#1,…參數#1024)]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
]
[FOR REPLICATION]
AS 程序行
其中存儲過程名不能超過128個字。每個存儲過程中最多設定1024個參數
(SQL Server 7.0以上版本),參數的使用方法如下:
@參數名數據類型[VARYING] [=內定值] [OUTPUT]
(4)存儲過程參數約束擴展閱讀:
存儲過程相關的其他資料庫原理術語:觸發器
觸發器可以查詢其他表,而且可以包含復雜的SQL語句。它們主要用於強制服從復雜的業務規則或要求。例如:您可以根據客戶當前的帳戶狀態,控制是否允許插入新訂單。
觸發器也可用於強制引用完整性,以便在多個表中添加、更新或刪除行時,保留在這些表之間所定義的關系。然而,強制引用完整性的最好方法是在相關表中定義主鍵和外鍵約束。如果使用資料庫關系圖,則可以在表之間創建關系以自動創建外鍵約束。
『伍』 SQL server中,存儲過程基礎和表達式怎麼寫,然後約束怎麼理解
什麼是存儲過程呢?
存儲過程就是作為可執行對象存放在資料庫中的一個或多個SQL命令。
通俗來講:存儲過程其實就是能完成一定操作的一組SQL語句。
那為什麼要用存儲過程呢?
1.存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。
2.當對資料庫進行復雜操作時,可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。
3.存儲過程可以重復使用,可減少資料庫開發人員的工作量。
4.安全性高,可設定只有某些用戶才具有對指定存儲過程的使用權
那存儲過程怎麼用呢?
以下通過表Student 來了解存儲過程,因為是要了解存儲過程的簡單用法,所以所有例子均很簡單。
無參數存儲過程:
選出Student表中的所有信息,
create proc StuProc
as //此處 as 不可以省略不寫
begin //begin 和 end 是一對,不可以只寫其中一個,但可以都不寫
select S#,Sname,Sage,Ssex from student
end
go
有參數存儲過程:
全局變數
全局變數也稱為外部變數,是在函數的外部定義的,它的作用域為從變數定義處開始,到本程序文件的末尾。
選出指定姓名的學生信息:
create proc StuProc
@sname varchar(100)
as
begin
select S#,Sname,Sage,Ssex from student where sname=@sname
end
go
exec StuProc '趙雷' //執行語句
上面是在外部給變數賦值,也可以在內部直接給變數設置默認值
create proc StuProc
@sname varchar(100)='趙雷'
as
begin
select S#,Sname,Sage,Ssex from student where sname=@sname
end
go
exec StuProc
也可以把變數的內容輸出,使用output
create proc StuProc
@sname varchar(100),
@IsRight int output //傳出參數
as
if exists (select S#,Sname,Sage,Ssex from student where sname=@sname)
set @IsRight =1
else
set @IsRight=0
go
declare @IsRight int
exec StuProc '趙雷' , @IsRight output
select @IsRight
以上是全局變數,下面來了解局部變數
局部變數也稱為內部變數。局部變數是在函數內作定義說明的。其作用域僅限於函數內部,離開該函數後再使用這種變數是非法的。
局部變數的定義:必須先用Declare命令定以後才可以使用,declare{@變數名 數據類型}
局部變數的賦值方法:set{@變數名=表達式}或者select{@變數名=表達式}
局部變數的顯示:select @變數名
create proc StuProc
as
declare @sname varchar(100)
set @sname='趙雷'
select S#,Sname,Sage,Ssex from student where sname=@sname
go
exec StuProc
那如果是要把局部變數的數據顯示出來怎麼辦呢?
create proc StuProc
as
declare @sname varchar(100)
set @sname=(select Sname from student where S#=01)
select @sname
go
exec StuProc
『陸』 如何創建帶參數的存儲過程
創建帶參數的存儲過程首先要在存儲過程中聲明該參數,每個存儲過程參數都必須用唯一的名稱進行定義。與T-SQL變數相同,參數名必須以@為前綴,並且遵從標識符規則。當用戶不提供該參數的值時可以使用一個默認值來代替。
『柒』 存儲過程中定義參數的意義是什麼
存儲過程其實就是一個功能,定義參數就是為了這個調用者使用他所要的結果
舉個簡單例子:
手機是存儲過程(不變)
手機號碼卡是參數(可變)
換不同的號碼使用手機,功能可能不一樣,這個號碼是張三使用,那個號碼是李四使用。
這就是存儲過程中定義參數的意義。
『捌』 存儲過程允許帶參數,參數分為哪兩種
參數分為入參和出參(in 和 out)
create or replace procere p_test ( tx_Date in varchar2 , ret_code out number )
as
begin
……
end;
『玖』 SQL中存儲過程是干什麼用的
存儲過程是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,它存儲在資料庫中,一次編譯後永久有效,用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是資料庫中的一個重要對象。
資料庫存儲過程的實質就是部署在資料庫端的一組定義代碼以及SQL。將常用的或很復雜的工作,預先用SQL語句寫好並用一個指定的名稱存儲起來,那麼以後要叫資料庫提供與已定義好的存儲過程的功能相同的服務時,只需調用execute,即可自動完成命令。
每個參數名前要有一個「@」符號,每一個存儲過程的參數僅為該程序內部使用,參數的類型除了IMAGE外,其他SQL Server所支持的數據類型都可使用。
(9)存儲過程參數約束擴展閱讀:
SQL中存儲過程優點:
1、重復使用。存儲過程可以重復使用,從而可以減少資料庫開發人員的工作量。
2、減少網路流量。存儲過程位於伺服器上,調用的時候只需要傳遞存儲過程的名稱以及參數就可以了,因此降低了網路傳輸的數據量。
3、安全性。參數化的存儲過程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke許可權應用於存儲過程。
4、存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。