資料庫的觸發器
『壹』 資料庫觸發器是什麼
觸發器是一類特殊的存儲過程,被定義為在對表或視圖發出 UPDATE、INSERT 或 DELETE 語句時自動執行。觸發器是功能強大的工具,使每個站點可以在有數據修改時自動強制執行其業務規則。觸發器可以擴展 sql Server 約束、默認值和規則的完整性檢查邏輯,但只要約束和默認值提供了全部所需的功能,就應使用約束和默認值。
表可以有多個觸發器。CREATE TRIGGER 語句可以與 FOR UPDATE、FOR INSERT 或 FOR DELETE 子句一起使用,指定觸發器專門用於特定類型的數據修改操作。當指定 FOR UPDATE 時,可以使用 IF UPDATE (column_name) 子句,指定觸發器專門用於具體某列的更新。
代碼是寫在資料庫裡面的,觸發器包含 Transact-SQL 語句,這與存儲過程十分相似。
如果你有安裝SQL SEVER,那麼你可以在SQL SEVER的幫助文檔里找到很多詳細的解析,打開查詢分析器按F1也可以打開SQL SEVER的幫助文檔。
示例
下例首先創建一個觸發器,當用戶在表 roysched 中添加或更改數據時,該觸發器向客戶端列印一條用戶定義消息。然後,使用 ALTER TRIGGER 語句使該觸發器僅對 INSERT 活動有效。該觸發器有助於提醒向表中插入行或更新行的用戶及時通知書的作者和出版商。
USE pubs
GO
CREATE TRIGGER royalty_reminder
ON roysched
WITH ENCRYPTION
FOR INSERT, UPDATE
AS RAISERROR (50009, 16, 10)
-- Now, alter the trigger.
USE pubs
GO
ALTER TRIGGER royalty_reminder
ON roysched
FOR INSERT
AS RAISERROR (50009, 16, 10)
『貳』 SQL中觸發器有什麼作用
觸發器(trigger)是SQL server 提供給程序員和數據分析員來保證數據完整性的一種方法,它是與表事件相關的特殊的存儲過程,它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發,比如當對一個表進行操作( insert,delete, update)時就會激活它執行。觸發器經常用於加強數據的完整性約束和業務規則等。 觸發器可以從 DBA_TRIGGERS ,USER_TRIGGERS 數據字典中查到。SQL3的觸發器是一個能由系統自動執行對資料庫修改的語句。
觸發器與存儲過程的唯一區別是觸發器不能執行EXECUTE語句調用,而是在用戶執行Transact-SQL語句時自動觸發執行。
觸發器可以查詢其他表,而且可以包含復雜的SQL語句。它們主要用於強制服從復雜的業務規則或要求。例如:您可以根據客戶當前的帳戶狀態,控制是否允許插入新訂單。
觸發器也可用於強制引用完整性,以便在多個表中添加、更新或刪除行時,保留在這些表之間所定義的關系。然而,強制引用完整性的最好方法是在相關表中定義主鍵和外鍵約束。如果使用資料庫關系圖,則可以在表之間創建關系以自動創建外鍵約束。
SQL Server 包括三種常規類型的觸發器:DML 觸發器、DDL 觸發器和登錄觸發器。
語法為:
CREATE TRIGGER `<databaseName>`.`<triggerName>`
< [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >
ON [dbo]<tableName> //dbo代表該表的所有者
FOR EACH ROW
BEGIN
--do something
END
觸發器可通過資料庫中的相關表實現級聯更改,不過,通過級聯引用完整性約束可以更有效地執行這些更改。觸發器可以強制比用CHECK約束定義的約束更為復雜的約束。與 CHECK 約束不同,觸發器可以引用其它表中的列。例如,觸發器可以使用另一個表中的 SELECT 比較插入或更新的數據,以及執行其它操作,如修改數據或顯示用戶定義錯誤信息。觸發器也可以評估數據修改前後的表狀態,並根據其差異採取對策。一個表中的多個同類觸發器(INSERT、UPDATE 或 DELETE)允許採取多個不同的對策以響應同一個修改語句。
約束和觸發器在特殊情況下各有優勢。觸發器的主要好處在於它們可以包含使用 Transact-SQL 代碼的復雜處理邏輯。因此,觸發器可以支持約束的所有功能;但它在所給出的功能上並不總是最好的方法。實體完整性總應在最低級別上通過索引進行強制,這些索引或是 PRIMARY KEY 和 UNIQUE 約束的一部分,或是在約束之外獨立創建的。假設功能可以滿足應用程序的功能需求,域完整性應通過 CHECK 約束進行強制,而引用完整性(RI) 則應通過 FOREIGN KEY 約束進行強制。在約束所支持的功能無法滿足應用程序的功能要求時,觸發器就極為有用。
CHECK 約束只能根據邏輯表達式或同一表中的另一列來驗證列值。如果應用程序要求根據另一個表中的列驗證列值,則必須使用觸發器。約束只能通過標準的系統錯誤信息傳遞錯誤信息。如果應用程序要求使用(或能從中獲益)自定義信息和較為復雜的錯誤處理,則必須使用觸發器。
觸發器可通過資料庫中的相關表實現級聯更改;不過,通過級聯引用完整性約束可以更有效地執行這些更改。觸發器可以禁止或回滾違反引用完整性的更改,從而取消所嘗試的數據修改。當更改外鍵且新值與主鍵不匹配時,此類觸發器就可能發生作用。例如,可以在 titleauthor.title_id 上創建一個插入觸發器,使它在新值與 titles.title_id 中的某個值不匹配時回滾一個插入。不過,通常使用 FOREIGN KEY 來達到這個目的。
如果觸發器表上存在約束,則在 INSTEAD OF 觸發器執行後但在 AFTER 觸發器執行前檢查這些約束。如果約束破壞,則回滾 INSTEAD OF 觸發器操作並且不執行 AFTER 觸發器。
實例1:insert觸發器
create trigger tri_insert
on student
for insert
as
declare @student_id char(10)
select @student_id=s.student_id from
student s inner join inserted i
on s.student_id=i.student_id
if @student_id='0000000001'
begin
raiserror('不能插入1的學號!',16,8)
rollback tran
end
go
實例2:update觸發器
create trigger tri_update
on student
for update
as
if update(student_id)
begin
raiserror('學號不能修改!',16,8)
rollback tran
end
go
實例3:delete觸發器示
create trigger tri_delete
on student
for delete
as
declare @student_id varchar(10)
select @student_id=student_id from deleted
if @student_id='admin'
begin
raiserror('錯誤',16,8)
rollback tran
end
『叄』 在資料庫里怎麼使用觸發器
觸發器是一類特殊的存儲過程,開發人員也可以定義、編寫符合業務需求的觸發器來維護數據的完整性。觸發器的控制流程及控制語句與存儲過程相同,但觸發器與存儲過程還是有相當大的差別,觸發器的定義格式及開啟方式與存儲過程不同,作為數據管理員或編程人員,熟練掌握觸發器的用法對維護、操作資料庫非常重要。基本語法1.創建觸發器語法格式創建語法:CREATETRIGGER+觸發器名稱+觸發時間點+觸發事件+ON+表名+FOREACHROWBEGIN…END其中,觸發時間點:BEFORE或AFTER,指明是在觸發事件之前還是之後執行。
觸發事件:INSERT、UPDATE、DELETE事件。例如,以下語句創建一個名字叫upd_check的觸發器,其在對account表作更新(UPDATE)操作之前(BEFORE)自動觸發。
CREATETRIGGERupd_…END2.刪除觸發器語法格式DROPTRIGGER+觸發器名稱3.觸發器案例用tab.sql腳本創建表環境,然後用下面語句創建觸發器。當往tab1表添加記錄後將觸發此觸發器,將此新記錄同時插入tab2表中。
DELIMITER//DROPTRIGGERIFEXISTSt_afterinsert_on_tab1;CREATETRIGGERt_afterinsert_on_(tab2_id)values(new.tab1_id);END;//DELIMITER;當用下面語句往tab1表插入記錄時,tab2表中同時也添加了同樣的記錄,如圖tab1數據表
tab1數據表
tab2數據表
INSERTINTOtab1(tab1_id)values(')
tab.sql
『肆』 如何查詢資料庫中的所有觸發器
select name from sysobjects where xtype='TR' --所有觸發器
select name from sysobjects where xtype='P' --所有存儲過程
select name from sysobjects where xtype='V' --所有視圖
select name from sysobjects where xtype='U' --所有表
以上為SqlServer用法
Select object_name From user_objects Where object_type='TRIGGER'; --所有觸發器
Select object_name From user_objects Where object_type='PROCEDURE'; --所有存儲過程
Select object_name From user_objects Where object_type='VIEW'; --所有視圖
Select object_name From user_objects Where object_type='TABLE'; --所有表
以上為Oracle用法
以上,希望對你有所幫助!
『伍』 資料庫中的觸發器是什麼,請幫忙解釋一下
觸發器是一種特殊類型的存儲過程,當使用下面的一種或多種數據修改操作在指定表中對數據進行修改時,觸發器會生效:UPDATE、INSERT 或 DELETE。觸發器可以查詢其它表,而且可以包含復雜的 SQL 語句。它們主要用於強制復雜的業務規則或要求。例如,可以控制是否允許基於顧客的當前帳戶狀態插入定單。
觸發器還有助於強制引用完整性,以便在添加、更新或刪除表中的行時保留表之間已定義的關系。然而,強制引用完整性的最好方法是在相關表中定義主鍵和外鍵約束。如果使用資料庫關系圖,則可以在表之間創建關系以自動創建外鍵約束。有關詳細信息,請參見表關系。
使用觸發器的優點
觸發器的優點如下:
觸發器是自動的:它們在對表的數據作了任何修改(比如手工輸入或者應用程序採取的操作)之後立即被激活。
觸發器可以通過資料庫中的相關表進行層疊更改。例如,可以在 titles 表的 title_id 列上寫入一個刪除觸發器,以使其它表中的各匹配行採取刪除操作。該觸發器用 title_id 列作為唯一鍵,在 titleauthor、sales 及 roysched 表中對各匹配行進行定位。
觸發器可以強制限制,這些限制比用 CHECK 約束所定義的更復雜。與 CHECK 約束不同的是,觸發器可以引用其它表中的列。例如,觸發器可以回滾試圖對價格低於 10 美元的書(存儲在 titles 表中)應用折扣
『陸』 資料庫表中的觸發器有幾種
CREATE TRIGGER [owner.]trigger_name
ON [owner.]table_name
FOR {INSERT, UPDATE, DELETE}
[WITH ENCRYPTION]
AS sql_statements
這是建立觸發器基本語句,只有三種,insert,update,delete
『柒』 資料庫觸發器的優缺點以及用法
觸發器本質上講就是事件監控器,可以定義在資料庫系統進行某一個操作的前後。
當資料庫系統在進行特定的操作時,發現有觸發器定義,就去執行觸發器定義的功能,從而滿足某些特定的需要。
例如,在更新某些數據後,再去更新特定的數據。
這就可以定義一個觸發器完成這樣的需要。
觸發器的優點:
以事件方式來處理. 當數據發生變化的時候, 自動作處理。
缺點:
當資料庫之間 導出導入的時候, 可能會引起不必要的觸發邏輯。
『捌』 資料庫中的「觸發器」是什麼意思
在SQL中,名詞觸發器指「在資料庫中為響應一個特殊表格中的某些事件而自動執行的程序代碼。」(Wikipedia)說得簡單一些,它是在一個特殊的資料庫事件,如INSERT或DELETE發生時,自動激活的一段代碼。觸發器可方便地用於日誌記錄、對單個表格到其他鏈接式表格進行自動的「層疊式」更改、或保證對表格關系進行自動更新。當一個新整數值增加到資料庫域中時,自動更新運行的總數的代碼段是一個觸發器。自動記錄對一個特殊資料庫表格所作更改的SQL命令塊也是一個觸發器實例
『玖』 SQL資料庫中的觸發器怎麼寫啊急
CREATE TRIGGER trig_stu_update ON student
FOR UPDATE
AS
begin
end;
CREATE TRIGGER trig_stu_delete ON student
FOR DELETE
AS
begin
end;
------------------
上面是更新、刪除的觸發器模板,將你的代碼填在begin...end之間。
觸發器中經常用到的inserted,deleted。
inserted裡面存放了insert、update操作的插入值或更新後值。
deleted里存放的是update、delete操作的更新前值或刪除值。
使用方法:
declare @no int,@sex bit,@age int;
--insert、update取新值
select @no=no,@sex=sex,@age=age from inserted;
--delete、update刪除值
select @no=no,@sex=sex,@age=age from deleted;
『拾』 資料庫中觸發器的作用是什麼
觸發器是資料庫提供給程序員和數據分析員來保證數據完整性的一種機制,它是一種與數據表事件相關的特殊的存儲過程。觸發器的執行不是由程序調用,也不需要手工開啟,而是由數據表上的事件來觸發,當用戶對一個數據表進行增、刪、改操作時就會激活它執行。
觸發器可以查詢其他表,而且可以包含復雜的SQL語句。它們主要用於強制服從復雜的業務規則或要求。觸發器也可用於強制引用完整性,以便在多個表中添加、更新或刪除行時,保留在這些表之間所定義的關系。
觸發器功能強大,可以輕松可靠地實現許多復雜的功能,但也不能過於依賴觸發器,濫用觸發器會造成關系資料庫及應用程序維護困難,性能、效率低下等問題的產生,在實際問題中,要根據實際需要選擇合適的解決方案。觸發器是一種特殊的存儲過程,在插入、刪除、修改特定表中的數據時觸發執行,擁有比資料庫本身更強大的數據控制能力,其作用有以下四大方面。
1.數據安全數據安全主要是指對信息系統中的業務數據提供一種數據變更的審核機制,當其通過安全策略的審核後,允許用戶變更相關數據,否則直接拒絕數據變更的請求。
安全原理:基於資料庫的值使用戶具有操作資料庫的某種權利。
((1)可以基於時間限制用戶的操作。例如,不允許下班後和節假日修改資料庫數據。
(2)可以基於資料庫中的數據限制用戶的操作。例如,不允許股票價格的升幅一次超過10%。
2.數據審計數據審計主要是指對數據伺服器上的記錄進行變更時的一種用戶許可權的即時審查與用戶行為的全方位記錄,以便事後對數據變更過程的追溯,保證數據變更的合法性。
審計原理:跟蹤用戶對資料庫的操作。
((1)審計用戶操作資料庫的語句。
(2)把用戶對資料庫的更新寫入審計表。
3.數據約束數據約束是指對用戶的操作行為將導致業務數據與實際情況相悖的行為進行檢查約束,而不讓其發生,從而保證數據的完整性與一致性。
約束原理:對用戶操作與實際邏輯的約束檢查。
((1)實現數據完整性檢查和約束。例如,回退任何企圖買進超過自己資金的貨物。
(2)提供可變的預設值。
4.數據連環更新數據連環更新是指當對數據進行更新操作時,將所有與此數據相關聯的數據作聯合的更新操作,以保證數據的完整性與一致性。
連環更新原理:對關聯數據作聯合更新操作。
((1)修改或刪除時級聯修改或刪除其他表中與之匹配的行。
(2)修改或刪除時把其他表中與之匹配的行設成NULL值。
(3)修改或刪除時把其他表中與之匹配的行級聯設成預設值。