更新時(shí)間:2021-06-21 14:07:49作者:admin2
首先介紹一下觸發(fā)器: 觸發(fā)器是一種特殊類型的存儲(chǔ)過程,當(dāng)使用下面的一種或多種數(shù)據(jù)修改操作在指定表中對(duì)數(shù)據(jù)進(jìn)行修改時(shí),觸發(fā)器會(huì)生效:UPDATE、INSERT 或 DELETE。觸發(fā)器可以查詢其它表,而且可以包含復(fù)雜的 SQL 語句。它們主要用于強(qiáng)制復(fù)雜的業(yè)務(wù)規(guī)則或要求。例如,可以控制是否允許基于顧客的當(dāng)前帳戶狀態(tài)插入定單。 觸發(fā)器還有助于強(qiáng)制引用完整性,以便在添加、更新或刪除表中的行時(shí)保留表之間已定義的關(guān)系。然而,強(qiáng)制引用完整性的最好方法是在相關(guān)表中定義主鍵和外鍵約束。如果使用數(shù)據(jù)庫關(guān)系圖,則可以在表之間創(chuàng)建關(guān)系以自動(dòng)創(chuàng)建外鍵約束。有關(guān)詳細(xì)信息,請(qǐng)參見表關(guān)系。 使用觸發(fā)器的優(yōu)點(diǎn) 觸發(fā)器的優(yōu)點(diǎn)如下: 觸發(fā)器是自動(dòng)的:它們?cè)趯?duì)表的數(shù)據(jù)作了任何修改(比如手工輸入或者應(yīng)用程序采取的操作)之后立即被激活。 觸發(fā)器可以通過數(shù)據(jù)庫中的相關(guān)表進(jìn)行層疊更改。例如,可以在 titles 表的 title_id 列上寫入一個(gè)刪除觸發(fā)器,以使其它表中的各匹配行采取刪除操作。該觸發(fā)器用 title_id 列作為唯一鍵,在 titleauthor、sales 及 roysched 表中對(duì)各匹配行進(jìn)行定位。 觸發(fā)器可以強(qiáng)制限制,這些限制比用 CHECK 約束所定義的更復(fù)雜。與 CHECK 約束不同的是,觸發(fā)器可以引用其它表中的列。 再介紹存儲(chǔ)過程: 存儲(chǔ)過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫中。用戶通過指定存儲(chǔ)過程的名字并給出參數(shù)(如果該存儲(chǔ)過程帶有參數(shù))來執(zhí)行它。存儲(chǔ)過程是數(shù)據(jù)庫中的一個(gè)重要對(duì)象,任何一個(gè)設(shè)計(jì)良好的數(shù)據(jù)庫應(yīng)用程序都應(yīng)該用到存儲(chǔ)過程。總的來說,存儲(chǔ)過程具有以下一些優(yōu)點(diǎn): ◆存儲(chǔ)過程允許標(biāo)準(zhǔn)組件式編程 ◆存儲(chǔ)過程能夠?qū)崿F(xiàn)較快的執(zhí)行速度 ◆存儲(chǔ)過程能夠減少網(wǎng)絡(luò)流量 ◆存儲(chǔ)過程可被作為一種安全機(jī)制來充分利用 使用 SQL Server 中的存儲(chǔ)過程而不使用存儲(chǔ)在客戶計(jì)算機(jī)本地的 Transact-SQL 程序的優(yōu)勢(shì)有: 允許模塊化程序設(shè)計(jì)。 只需創(chuàng)建過程一次并將其存儲(chǔ)在數(shù)據(jù)庫中,以后即可在程序中調(diào)用該過程任意次。存儲(chǔ)過程可由在數(shù)據(jù)庫編程方面有專長的人員創(chuàng)建,并可獨(dú)立于程序源代碼而單獨(dú)修改。 允許更快執(zhí)行。 如果某操作需要大量 Transact-SQL 代碼或需重復(fù)執(zhí)行,存儲(chǔ)過程將比 Transact-SQL 批代碼的執(zhí)行要快。將在創(chuàng)建存儲(chǔ)過程時(shí)對(duì)其進(jìn)行分析和優(yōu)化,并可在首次執(zhí)行該過程后使用該過程的內(nèi)存中版本。每次運(yùn)行 Transact-SQL 語句時(shí),都要從客戶端重復(fù)發(fā)送,并且在 SQL Server 每次執(zhí)行這些語句時(shí),都要對(duì)其進(jìn)行編譯和優(yōu)化。 減少網(wǎng)絡(luò)流量。 一個(gè)需要數(shù)百行 Transact-SQL 代碼的操作由一條執(zhí)行過程代碼的單獨(dú)語句就可實(shí)現(xiàn),而不需要在網(wǎng)絡(luò)中發(fā)送數(shù)百行代碼。 可作為安全機(jī)制使用。 即使對(duì)于沒有直接執(zhí)行存儲(chǔ)過程中語句的權(quán)限的用戶,也可授予他們執(zhí)行該存儲(chǔ)過程的權(quán)限