前觸發器是什麼意思?
什麼是觸發器
觸發器(trigger)是SQL server 提供給程序員和數據分析員來保證數據完整性的一種方法,它是與表事件相關的特殊的存儲過程,它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發,比如當對一個表進行操作( insert,delete, update)時就會激活它執行。觸發器經常用於加強數據的完整性約束和業務規則等。 觸發器可以從 DBA_TRIGGERS ,USER_TRIGGERS 數據字典中查到。SQL3的觸發器是一個能由系統自動執行對數據庫修改的語句。
觸發器可以查詢其他表,而且可以包含複雜的SQL語句。它們主要用於強制服從複雜的業務規則或要求。例如:您可以根據客戶當前的帳戶狀態,控制是否允許插入新訂單。
觸發器也可用於強制引用完整性,以便在多個表中添加、更新或刪除行時,保留在這些表之間所定義的關係。然而,強制引用完整性的最好方法是在相關表中定義主鍵和外鍵約束。如果使用數據庫關係圖,則可以在表之間創建關係以自動創建外鍵約束。
觸發器與存儲過程的唯一區別是觸發器不能執行EXECUTE語句調用,而是在用戶執行Transact-SQL語句時自動觸發執行。
什麼是觸發器?
觸發器是一種特殊的存儲過程,它在試圖更改觸發器所保護的數據時自動執行。
它被定義為在對錶或視圖發出 UPDATE、INSERT 或 DELETE 語句時自動執行,在有數據修改時自動強制執行其業務規則。
觸發器可以擴展 SQL Server 約束、默認值和規則的完整性檢查邏輯,但只要約束和默認值提供了全部所需的功能,就應使用約束和默認值。
*/
-- 觸發器的特點
/*
與表相關聯
觸發器定義在特定的表上,這個表稱為觸發器表。
自動激活觸發器
當對錶中的數據執行 INSERT、UPDATE 或 DELETE 操作時,如果對錶上的這個特定操作定義了觸發器,該觸發器自動執行,這是不可撤銷的。
不能直接調用
與存儲過程不同,觸發器不能被直接調用,也不能傳遞或接受參數。
作為事務的一部分
觸發器與激活觸發器的語句一起做為對一個單一的事務來對待,可以從觸發器中的任何位置回滾。
當使用觸發器時,應該考慮以下事實和知道原則:
即使不存在顯式的 BEGIN TRANSACTION 語句,在觸發器的定義中也可以包括 ROLLBACK TRANSACTION 語句
如果遇到一個 ROLLBACK TRANSACTION 語句,則整個事務回滾。如果在觸發器腳本中跟隨在 ROLLBACK TRANSACTION 語句後還有別的語句,
這些語句將繼續被執行。需要的話,可以使用 RETURN 語句來防止這些語句的執行。
如果包括 ROLLBACK TRANSACTION 語句的觸發器在一個用戶定義的事務中被激活,這個 ROLLBACK TRANSACTION 語句撤銷整個事務。
在這個用戶定義的事務的批處理語句中,激活該觸發器的語句之後的語句將不再執行。
*/
-- 舉例
/*
use Test
GO
create table dbo.t_record(idx int identity(1,1),col_1 varchar(20))
insert t_record (col_1) values ('Row 01')
insert t_record (col_1) values ('Row 02')
insert t_record (col_1) values ('Row 03')
*/
create trigger tr_record_delete on dbo.t_record
for delete
as
/*
作用:當刪除表 t_record 中的記錄時,若一次刪除 1 條以上,則取消刪除
*/
if (select count(*) from deleted)>1
begin
raiserror('You cannot delete more than one record at a time',16,1)
rollback tran
end
Go
select * from t_record
delete t_record
select * from t_record
delete t_record where idx=1
-- 觸發器的使用
/*
......
觸發器的特性方程是什麼意思啊 看不懂啊 比如 Qn=Qn ̄S+ ̄R 這裡的Q表示觸發前觸發器的狀態 50分
不太行吧,,,,
什麼是觸發器
SQL觸發器實例1定義: 何為觸發器?在SQL Server裡面也就是對某一個表的一定的操作,觸發某種條件,從而執行的一段程序。觸發器是一個特殊的存儲過程。
常見的觸發器有三種:分別應用於Insert , Update , Delete 事件。
我為什麼要使用觸發器?比如,這麼兩個表:
Create Table Student( --學生表
StudentID int primary key, --學號
....
)
Create Table BorrowRecord( --學生借書記錄表
BorrowRecord int identity(1,1), --流水號
StudentID int , --學號
BorrowDate datetime, --借出時間
ReturnDAte Datetime, --歸還時間
...
)
用到的功能有:
1.如果我更改了學生的學號,我希望他的借書記錄仍然與這個學生相關(也就是同時更改借書記錄表的學號);
2.如果該學生已經畢業,我希望刪除他的學號的同時,也刪除它的借書記錄。
等等。
這時候可以用到觸發器。對於1,創建一個Update觸發器:
Create Trigger truStudent
On Student --在Student表中創建觸發器
for Update --為什麼事件觸發
As --事件觸發後所要做的事情
if Update(StudentID)
begin
Update BorrowRecord
Set StudentID=i.StudentID
From BorrowRecord br , Deleted d ,Inserted i --Deleted和Inserted臨時表
Where br.StudentID=d.StudentID
end
理解觸發器裡面的兩個臨時的表:Deleted , Inserted 。注意Deleted 與Inserted分別表示觸發事件的表“舊的一條記錄”和“新的一條記錄”。
一個數據庫系統中有兩個虛擬表用於存儲在表中記錄改動的信息,分別是:
虛擬表Inserted 虛擬表Deleted
在表記錄新增時 存放新增的記錄 不存儲記錄
修改時 存放用來更新的新記錄 存放更新前的記錄
刪除時 不存儲記錄 存放被刪除的記錄 一個Update 的過程可以看作為:生成新的記錄到Inserted表,複製舊的記錄到Deleted表,然後刪除Student記錄並寫入新紀錄。
對於2,創建一個Delete觸發器
Create trigger tr......
什麼是觸發器,使用觸發器的好處是什麼
觸發器(trigger)是個特殊的存儲過程,它的執行不是由程序調用,也不是手工啟動,而是由個事件來觸發,比如當對一個表進行操作( insert,delete, update)時就會激活它執行。觸發器經常用於加強數據的完整性約束和業務規則等。 觸發器可以從 DBA_TRIGGERS ,USER_TRIGGERS 數據字典中查到。
觸發器可以查詢其他表,而且可以包含複雜的 SQL 語句。它們主要用於強制服從複雜的業務規則或要求。例如:您可以根據客戶當前的帳戶狀態,控制是否允許插入新訂單。
觸發器也可用於強制引用完整性,以便在多個表中添加、更新或刪除行時,保留在這些表之間所定義的關係。然而,強制引用完整性的最好方法是在相關表中定義主鍵和外鍵約束。如果使用數據庫關係圖,則可以在表之間創建關係以自動創建外鍵約束。
創建觸發器的SQL語法
DELIMITER |
CREATE TRIGGER `
< [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >
ON
FOR EACH ROW
BEGIN
--do something
END |
觸發器的優點
觸發器可通過數據庫中的相關表實現級聯更改;不過,通過級聯引用完整性約束可以更有效地執行這些更改。觸發器可以強制比用 CHECK 約束定義的約束更為複雜的約束。與 CHECK 約束不同,觸發器可以引用其它表中的列。例如,觸發器可以使用另一個表中的 SELECT 比較插入或更新的數據,以及執行其它操作,如修改數據或顯示用戶定義錯誤信息。觸發器也可以評估數據修改前後的表狀態,並根據其差異采取對策。一個表中的多個同類觸發器(INSERT、UPDATE 或 DELETE)允許採取多個不同的對策以響應同一個修改語句。
比較觸發器與約束
約束和觸發器在特殊情況下各有優勢。觸發器的主要好處在於它們可以包含使用 Transact-SQL 代碼的複雜處理邏輯。因此,觸發器可以支持約束的所有功能;但它在所給出的功能上並不總是最好的方法。實體完整性總應在最低級別上通過索引進行強制,這些索引或是 PRIMARY KEY 和 UNIQUE 約束的一部分,或是在約束之外獨立創建的。假設功能可以滿足應用程序的功能需求,域完整性應通過 CHECK 約束進行強制,而引用完整性 (RI) 則應通過 FOREIGN KEY 約束進行強制。在約束所支持的功能無法滿足應用程序的功能要求時,觸發器就極為有用。
例如:除非 REFERENCES 子句定義了級聯引用操作,否則 FOREIGN KEY 約束只能以與另一列中的值完全匹配的值來驗證列值。
CHECK 約束只能根據邏輯表達式或同一表中的另一列來驗證列值。如果應用程序要求根據另一個表中的列驗證列值,則必須使用觸發器。
約束只能通過標準的系統錯誤信息傳遞錯誤信息。如果應用程序要求使用(或能從中獲益)自定義信息和較為複雜的錯誤處理,則必須使用觸發器。
觸發器可通過數據庫中的相關表實現級聯更改;不過,通過級聯引用完整性約束可以更有效地執行這些更改。
觸發器可以禁止或回滾違反引用完整性的更改,從而取消所嘗試的數據修改。當更改外鍵且新值與主鍵不匹配時,此類觸發器就可能發生作用。例如,可以在 titleauthor.title_id ......
觸發器分為事前觸發和事後觸發,這兩種觸發有何區別
我看ORALCE,然後是這樣理解的,
例如對一個表進行插入insert操作,在插入時觸發一個觸發器,如果是
事前觸發:“before insert on 表名”,則可以在未插入前,對想插入的那一行“insert into 表名 values(a,b,c)”裡的a,b,c進行操作,
例如把a換成f,“:new.a :=f ”,
":new"是插入前臨時內存(用於insert update),保存著insert的記錄,“:new.a”就引用了臨時記錄的a,“:new.a :=f ”就是把f放進這個a裡面,然後才執行臨時內存寫入表,這時實際插入到表的是(f,b,c)了。
事後觸發:因為有時有兩個表是相關聯的,如果你刪除了第一個表,第二個表的某寫記錄的找不到關聯,就變得沒意義了,所以為了實現事務的完整性,在刪除第一表的某記錄後,還要同時刪除第二個表的對應記錄,這時就用到事後觸發了“after delete on 表1”,在對錶1進行刪除操作時“delete from 表1 where 表1.id='001';”,
同時刪除表2的記錄"delete from 表2 where 表2.id=:old.id",
":old"是操作後臨時內存(用於delete,update),它保存了進行刪除操作後的記錄,這裡相當於刪除表2中“表1.id=表2.id”的記錄。
一樓朋友說的事後觸發不能撤消好象不對的,事後觸發就是為了保證事務的完整性,只要rollback回滾操作,表1和表2的刪除操作都會被撤消的。
什麼是觸發器?起到什麼作用?
觸發器是事件編輯器的精髓所在,遊戲中多樣的任務、不同的事件、勝利/失敗的條件、天氣的變化等等這些全部都是觸發器的功勞。 觸發器由三個部分組成,事件、條件、動作。 事件:或稱為觸發事件,顧名思義,就是當某個事件發生的時候就運行觸發器。 條件:判斷是否達到指定的條件,如果沒有達到條件將不執行動作。可以留空,表示直接執行動作。一般來說,條件越多越容易出錯,所以儘量只使用一兩個條件。 動作:條件通過後所要做的事情。 我用個簡單例子來說明,比如一個英雄進入地區後遊戲勝利,那麼就要這樣設置。 事件:一個單位進入地區
條件:判斷單位是一個英雄為Turn
動作:遊戲勝利。 在每個新建地圖中都會有個叫做初始化的類,其中有個叫做對戰初始化的觸發器,它設定了每張地圖默認的初始設置,其中包括:
Use melee time of day (for all players) - 啟用默認的遊戲中開始時間。
Limits Heros to 1 per Hero-type (for all players) - 限制玩家同一種英雄只能生產一名。
Hero trained Heroes a Scroll of Town Portal (for all players) - 給英雄一個傳送卷軸。
Set starting resources (for all players) - 設置起始資源,給每個玩家分配一開始擁有的資源。
Remove creeps and critters from used start locations (for all players) - 移除開始點附近的野生單位、障礙物等。
Create starting units (for all players) - 在開始點上創建玩家開始對戰遊戲需要的主基地和工人
Run melee AI scripts - 讓所有計算機玩家執行對戰遊戲人工智能。
Enforce victory/defeat conditions - 使用默認的勝利失敗條件,所有建築物被破壞即失敗。 如果不需要,刪除掉它們就可以了,事實上大部分RPG地圖都不需要這些條件。 觸發器的所有指令都是英文的,不過沒關係,我專門為此製作了一箇中英對照表,並在其中做了簡要說明。請參閱附錄:觸發器中英對照表。 除此之外,觸發器中還有很多函數,例如:"Last Created Unit",最後創建的單位。合理運用這些函數也是非常重要的,在觸發器的使用中將會大量使用到這些函數。 觸發器的使用是千變萬化的,本章我介紹一些常見的例子,希望你能夠舉一反三,瞭解觸發器的使用。 注意:類可以用中文命名,註釋也可以用中文命名,但觸發器不能用中文命名!
觸發器是什麼意思?在電工裡起什麼作用?
又稱“雙穩態多諧振盪器”。觸發器(Flip Flop)是一種可以存儲電路狀態的電子元件。最簡單的是由兩個或非門,兩個輸入端和兩個輸出端組成的RS觸發器(見圖)。複雜一些的有帶時鐘(CLK)段和D(Data)端,在CLK端為高電平時跟隨D端狀態,而在CLK端變為低電平的瞬間鎖存信號的D觸發器。更常用的是兩個簡單D觸發器級聯而成的在時鐘下跳沿所存信號的邊緣D觸發器,廣泛應用於計數器、運算器、存儲器等電子部件。 照 明 配 件:用於高強度氣體放電燈(H.I.D)的啟動,型號繁多.由於高強度氣體放電燈啟動時需要一個高電壓來使氣體電離進入等離子態,因而需要一個高壓發生器做為啟動器。這就是觸發器早期的機械型觸發器已經淘汰。現在絕大多數觸發器都是使用可控硅或高壓觸發二極管的電子觸發器,常用的型號有:OSRAM 的 CD-7 飛利浦的 SI51 SN58 愛倫的ALK400等
在外加信號觸發下能轉換工作狀態的電路。通常用觸發器的輸出端電壓表明其工作狀態。觸發器分為兩類。一類稱為雙穩態觸發器,它有兩個穩定的工作狀態。在外加信號觸發下電路可從一種穩定的工作狀態轉換到另一種穩定的工作狀態。另一類稱為單穩態觸發器,它有一個穩定的工作狀態和一個暫時穩定的工作狀態。無外加信號觸發時觸發器處於穩定的工作狀態,在受外加信號觸發後觸發器從穩定的工作狀態轉換到暫時穩定的工作狀態,經過短暫時間後,自動返回到原來的穩定工作狀態。 觸發器 雙穩態觸發器 基本電路如圖1的上半部。它由兩個反相器直接耦合而成。反相器1由晶體管T1和電阻Rc1R11及R12組成,反相器2由晶體管T2和電阻Rc2、R21及R22組成。反相器1的輸出端Q即是反相器2的輸入端,同樣,反相器2的輸出端悩也是反相器1的輸入端,兩級反相器是互相反饋的。這個電路具有兩種穩定狀態:一種穩態是T1管導通、T2管截止,Q端為低電位、悩為高電位;另一種穩態是T1管截止、T2管導通,Q端為高電位、悩端為低電位。加上電壓 Ec和-Eb後電路即進入一種穩定狀態。若不加觸發信號,電路則永遠處於這個穩定狀態。
欲使電路從一種穩態轉換到另一種穩態,必須外加觸發信號。圖1的下半部分是兩個引導觸發信號給各個反相器的電路。它們分別由微分電路R1C1、R2C2和隔離二極管D1、D2組成。
當外加負觸發脈衝作用於引導電路的“S”端時,通過微分電路R1C1使D1導通,b1點呈低電位。此時不論觸發器原處何種狀態T1管截止,Q點變為高電位,T2管導通,悩點變為低電位。這種穩態稱為觸發器的“置位”狀態,“S”端稱為“置位”端。反之,外加負觸發脈衝作用於“R”端時,則使悩端為高電位,Q端為低電位。這種穩態為觸發器的“復位”狀態,“R”端稱為“復位”端。具有置位、復位功能的觸發器稱為R-S觸發器。
雙穩態觸發器可用來構成各種計數器、分頻器和寄存器等。
射極耦合觸發器 又稱施密特觸發器,其原理電路如圖2。它也由兩級反相器直接耦合而成。第一級反相器的輸出端c1是第二級反相器的輸入端。第一級反相器的輸入端接輸入觸發電壓ui,第二級反相器的輸出端提供輸出電壓u0。兩級反相器通過公共的發射極電阻Re耦合在一起,因而稱射極耦合觸發器。這種觸發器也有兩種穩定狀態,一種穩態是T1管導通、T2管截止,輸出u0為高電位;另一種穩態是T1管截止,T2管導通,u0為低電位。觸發器的穩定狀態決定於輸入u電位的高低,因此這種觸發器具有電位觸發特性。當輸入ui為低電位時,T1管截止,c1點電位升高,使T2管導通,輸出u0也是低電位。當ui為高電位時,T1管導通......
觸發器的作用是什麼?
如果你刪除一條數據等於牽連著另一條sql語句一同被執行。
舉個你能懂的例子:
相當於在生活中你不小心踩了我一腳我隨後做出的反應明白了嗎?
當你插入一條sql語句的時候需要在其他表中做得處理,比如增加了這個表的數據你想同時增加兩個表的數據就需要用到觸發器,因為在界面寫業務邏輯往往很複雜,還不如直接在sql裡寫好,所以這時最好用到的就是觸發器了,懂了吧!
oracle觸發器 前面的紅叉是什麼意思
觸發器使用的表的結構發生過變化,需要重新編譯一下,並不表示觸發器一定有錯誤。