国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

SQL Server中觸發(fā)器與約束的應(yīng)用比較

2012-04-29 02:31:34高水娟
電腦知識與技術(shù) 2012年1期
關(guān)鍵詞:觸發(fā)器約束

高水娟

摘要:SQL Server提供了兩種主要機制來強制執(zhí)行業(yè)務(wù)規(guī)則和數(shù)據(jù)完整性:約束和觸發(fā)器。約束主要用于確保輸入到列中的數(shù)據(jù)滿足特定的條件。觸發(fā)器是一種特殊類型的存儲過程,當表中的數(shù)據(jù)發(fā)生更新時將自動調(diào)以響應(yīng)insert、update、delete語句。

關(guān)鍵詞:約束;觸發(fā)器;數(shù)據(jù)完整性

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2012)01-0003-02

SQL Server Triggers and Constraints in the Application of Comparison

GAO Shui-juan

Abstract: SQL Server provides two main mechanisms to enforce business rules and data integrity: constraint and trigger. Tie main is used to ensure that the input to the data in the column satisfy certain conditions. Trigger is a special procedure, when the data in the table is updated automatically adjusted in response to insert, update, delete statement.

Key words: constraint; trigger; data integrity

SQL Server提供了兩種主要機制來強制執(zhí)行業(yè)務(wù)規(guī)則和數(shù)據(jù)完整性:約束和觸發(fā)器。約束主要被用于強制數(shù)據(jù)的完整性,約束也能提供比觸發(fā)器更好的性能。然而,在所能完成的操作,以及完成工作時所能使用約束是有限制的。觸發(fā)器則常被用于驗證業(yè)務(wù)規(guī)則,或是更復(fù)雜的數(shù)據(jù)驗證,然后可以對數(shù)據(jù)庫的其他地方的數(shù)據(jù)完成更深入的更新。約束只能對其所在表中的數(shù)據(jù),或是在設(shè)計時輸入的特定數(shù)據(jù)進行驗證。這同觸發(fā)器形成對比,觸發(fā)器可以跨越數(shù)據(jù)庫甚至服務(wù)器,可以對任何在設(shè)計時設(shè)置的數(shù)據(jù),或從任何表上的其他行為所收集的數(shù)據(jù)進行檢查。如果所需要的訪問權(quán)限被給予所有包含的對象,就可以使用觸發(fā)器的這些功能。

有時候當觸發(fā)器要進行的是一項非常簡單的驗證任務(wù)時,在構(gòu)建約束和觸發(fā)器之間區(qū)別就很細微。在這種情況下,如果要處理的是有關(guān)數(shù)據(jù)完整性的內(nèi)容,則使用約束,這比使用觸發(fā)器可以提供更好的性能。如果該對象是針對業(yè)務(wù)規(guī)則而被構(gòu)建,并且可能需要復(fù)雜的驗證,需要處理多個數(shù)據(jù)庫或服務(wù)器,或是要相關(guān)的錯誤處理,那么就應(yīng)該構(gòu)建觸發(fā)器。例如,如果需要針對一個表上的操作(更新,刪除等)結(jié)果,對另一個數(shù)據(jù)庫中的表進行更改,則必須使用觸發(fā)器。如果從生產(chǎn)數(shù)據(jù)庫中,對另外的數(shù)據(jù)庫保持審核捕獲,就會遇到這種情況。如果要做的事情很簡單,如對數(shù)據(jù)域進行驗證,看看其中所包含的值是否在一個指定的范圍內(nèi),這時使用約束就足夠了。

約束本質(zhì)上是SQL Server放置在列上的一種檢查,用以確保輸入到列中的數(shù)據(jù)滿足特定的條件。這樣可以防止輸入錯誤的數(shù)據(jù),從而避免數(shù)據(jù)不一致。如為學(xué)生信息表student中的性別字段sex添加檢查約束,要求性別字段的值只能是男或女。程序如下:

--假定數(shù)據(jù)庫sdb、學(xué)生信息表student已建立

use studb

go

alter table student

add constraint ck_sex check (sex=男or sex=女)

go

若在性別字段插入其他的值,即會發(fā)出警告,如圖1所示。

觸發(fā)器的應(yīng)用以學(xué)生成績管理系統(tǒng)為例,現(xiàn)假定該系統(tǒng)的數(shù)據(jù)設(shè)計需要兩張表:學(xué)生信息表(student)存放學(xué)生的基本信息,學(xué)生成績表(score)存放學(xué)生的成績信息?,F(xiàn)在所要求的功能為:當向?qū)W生成績表中插入一條記錄的時候,新記錄的學(xué)生信息必須存放在學(xué)生信息表中。程序如下:

--假定數(shù)據(jù)庫sdb已建立

use sdb

go

--創(chuàng)建學(xué)生信息表student

create table student

(sno char(8) not null, sname char(8) not null, sex char(2),birthday datetime, class char(5))

go

--創(chuàng)建學(xué)生成績表score

create table score

(sno char(8) not null, sname char(8) not null, cname char(20) not null, score int not null)

go

--創(chuàng)建insert觸發(fā)器trig_score

create trig_score on score for insert

as

declare @sno char(8), @sname char(8)

select @sno=sno,@sname=sname from inserted

insert into student(sno,sname) values(@sno,@sname)

go

--插入測試數(shù)據(jù)

use sdb

go

insert into score values(‘104051,王麗,計算機英語,98)

go

--查看兩張表

select * from student

select * from score

如圖2所示。

由此可以看出,觸發(fā)器是在對表進行插入、更新或刪除操作時自動執(zhí)行的存儲過程。當在某一個表格中插入記錄、修改記錄或者刪除記錄時,SQL Server就會自動執(zhí)行觸發(fā)器所定義的SQL語句,從而確保對數(shù)據(jù)的處理必須符合由這些SQL語句所定義的規(guī)則。在SQL Server中,將觸發(fā)器和觸發(fā)它的語句作為可在觸發(fā)器內(nèi)回滾的單個事務(wù)對待。如果這次事務(wù)未獲成功,SQL Server會自動返回該事務(wù)執(zhí)行前的狀態(tài)。和CHECK約束相比,觸發(fā)器可以強制實現(xiàn)更加復(fù)雜的數(shù)據(jù)完整性,而且可以引用其他表中的字段。

參考文獻:

[1]徐曉麗.巧妙應(yīng)用SQL Server觸發(fā)器[J].微型電腦應(yīng)用,2010(4).

[2]張月.SQL Server中存儲過程與觸發(fā)器技術(shù)的研究與應(yīng)用[J].科技創(chuàng)新導(dǎo)報,2008(23).

[3]張淑梅.SQL Server2005開發(fā)與管理[M].大連:大連理工大學(xué)出版社,2009.

[4]喻梅,汪洋.SQL Server2005基礎(chǔ)教程[M].北京:清華大學(xué)出版社,2007.

猜你喜歡
觸發(fā)器約束
約束離散KP方程族的完全Virasoro對稱
RN中Schr?dinger-Poisson方程約束極小元的存在性
基于低頻軟約束的疊前AVA稀疏層反演
主從JK觸發(fā)器邏輯功能分析
電子世界(2017年22期)2017-12-02 03:03:45
使用觸發(fā)器,強化安全性
自我約束是一種境界
公民與法治(2016年8期)2016-05-17 04:11:40
適當放手能讓孩子更好地自我約束
人生十六七(2015年6期)2015-02-28 13:08:38
幾種常見觸發(fā)器工作方式的討論
科技傳播(2012年12期)2012-07-05 06:06:22
不等式約束下AXA*=B的Hermite最小二乘解
對觸發(fā)器邏輯功能轉(zhuǎn)換的分析
栾城县| 宁夏| 皋兰县| 静安区| 深州市| 弥渡县| 华宁县| 临夏县| 龙游县| 成安县| 寿光市| 会宁县| 龙江县| 汤阴县| 荔波县| 湟中县| 富裕县| 江阴市| 金坛市| 西峡县| 福安市| 安乡县| 阿城市| 长白| 桂阳县| 临漳县| 屏山县| 大悟县| 清河县| 内江市| 永泰县| 夏河县| 密山市| 洛隆县| 库伦旗| 蓝山县| 周口市| 射洪县| 中山市| 广南县| 呼图壁县|