數據庫中觸發器是什麼?
數據庫 觸發器有什麼用
觸發器
觸發器的定義就是說某個條件成立的時候,你觸發器裡面所定義的語句就會被自動的執行。因此觸發器不需要人為的去調用,也不能調用。
然後,觸發器的觸發條件其實在你定義的時候就已經設定好的了。這裡面需要說明一下,觸發器可以分為語句級觸發器和行級觸發器。詳細的介紹可以參考網上的資料,簡單的說就是語句級的觸發器可以在某些語句執行前或執行後被觸發。而行級觸發器則是在定義的了觸發的表中的行數據改變時就會被觸發一次。
具體舉例:
1. 在一個表中定義的語句級的觸發器,當這個表被刪除時,程序就會自動執行觸發器裡面定義的操作過程。這個就是刪除表的操作就是觸發器執行的條件了。
2. 在一個表中定義了行級的觸發器,那當這個表中一行數據發生變化的時候,比如刪除了一行記錄,那觸發器也會被自動執行了。
觸發器簡介:
觸發器是一種特殊類型的過程。與普通過程不同的是,過程需要用戶顯式地調用才執行,而觸發器則是當某些事件發生時,由Oracle自動執行。
觸發器主要由如下幾個部分組成:
觸發事件:
觸發條件:
觸發對象:
觸發操作:
編寫觸發器時,需要注意以下幾點:
觸發器不接受參數。
一個表上最多可以有12個觸發器,但同一時間、同一事件、同一類型的觸發器只能有一個。還需要注意,各個觸發器之間不能有矛盾。
在一個表上的觸發器越多,對在該表上的DML操作性能影響就越大。
觸發器最大為32KB。如果確實需要,可以先建立過程,然後在觸發器中用CALL語句調用。
在DML觸發器中只能使用DML語句(select,insert,update,delete)。
在系統觸發器中只能包含DDL語句(create,alter,drop)。
觸發器中不能包含事務控制語句(commit,rollback,savepoint)。因為觸發器是觸發語句的一部門,觸發語句被提交或回退時,觸發器也就被提交或回退了。
在觸發器主體中調用的任何過程、函數都不能使用事務控制語句。
在觸發器主體中不能聲明任何long和blob變量。新值new、舊值old也不能指向表中的任何long和blog列
不同類型的觸發器(如DML觸發器、INSTEAD OF觸發器、系統觸發器)的語法格式和作用都有較大區別。
SQL中,觸發器是什麼?
1、觸發器。 定義: 何為觸發器?在SQL Server裡面也就是對某一個表的一定的操作,觸發某種條件,從而執行的一段程序。觸發器是一個特殊的存儲過程。 常見的觸發器有三種:分別應用於Insert , Update , Delete 事件。(SQL Server 2000定義了新的觸發器,這裡不提) 我為什麼要使用觸發器?比如,這麼兩個表: 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 for Update ------------------------------------------------------- --Name:truStudent --func:更新BorrowRecord 的StudentID,與Student同步。 --Use :None --User:System --Author: 懶蟲 # SapphireStudio ( www.chair3.com) --Date : 2003-4-16 --Memo : 臨時寫寫的,給大家作個Sample。沒有調試阿。 ------------------------------------------------------- As if Update(StudentID) begin Update BorrowRecord Set br.StudentID=i.StudentID From BorrowRecord br , Deleted d ,Inserted i Where br.StudentID=d.StudentID end 理解觸發器裡面的兩個臨時的表:Deleted , Inserted 。注意Deleted 與Inserted分別表示......
請問數據庫 觸發器有什麼用
我就給你解釋一下實際場景吧
比如你有兩個表 A 和 B
A表有ID 和 NAME兩列
B表有ID,PLAY,NAMEID三列,A與B沒有關聯
如果你想刪除B表的內容,但是又同時想刪除A表中A.ID=B.NAMEID
那麼你就要寫兩條語句
如果使用觸發器
就只用寫刪除B表的內容語句,一旦刪除內容,則觸發器設定的表規則被觸發,那麼A表的相關內容也一起刪除了
SQL中觸發器有什麼作用
當你對錶進行了添刪改查等操作時,如果你需要做一些特定的業務操作,就可以使用觸發器。
顧名思義,觸發,當你做了某種預設的操作時才會執行觸發器的命令
舉個例子。。
假設你有個員工基礎信息表,裡面有員工的身份證號碼,手機等基本信息。。
那麼,當你換了身份證或手機,需要修改號碼的時候,肯定是去修改員工的基礎資料表。
假設你現在有別的地方,比如人事檔案啊之類的,同樣使用了員工的手機等信息。。難道你還要再去修改一次檔案表麼。。那麼如果還有其他地方使用了呢?
而觸發器就可以在這種時候做出判斷,如果修改了基礎表的信息,那麼就同步把其他使用了基礎表信息的地方也更改成最新的信息。。
大概就是這麼個意思。。當然還有其他的作用
數據庫中替代觸發器的定義是什麼 5分
(1)DML觸發器:是指觸發器在數據庫中發生數據操作語言(DML)事件時將啟用。DML事件即指在表或視圖中修改數據的insert、update、delete語句也。 (2)DDL觸發器:是指當服務器或數據庫中發生數據定義語言(DDL)事件時將啟用。DDL事件即指在表或索引中...
數據庫中的觸發器重點在什麼地方?
簡單來講哪就是事件觸發。
比如你對數據庫中的表進行了一個插刪等操作,你想在你即將做或者完成這個操作的時候程序能自動做一點別的工作,比如你想對插入數據檢查一下或者對刪除後的數據總數進行一下統計。
本來哪,你可以把這個工作寫在自己的程序裡,就是把檢查寫在你插入動作之前或者把統計數目寫在刪除動作之後。這樣的問題是:你要做插刪的時候就都要寫這些代碼,而且很容易就遺漏了。
而觸發器哪,你定義在某個操作上,比如把那個檢查的工作過程定義成插入的前觸發器,把統計工作定義成後觸發器,那麼在你進行插入刪除的時候,數據庫那邊的程序就自動的給你做了這個工作了。
主要作用哪:我感覺
一是完整性(防止自己編程的遺漏),
二是簡單,
三是由數據庫程序(比如Oracle)進行這項工作,而不是由你自己的程序做,效率高。
下面是人家的一些教程,其實道理是很簡單的。你可以用它後面講的幾個數據庫的例子,自己寫一個,試試就知道了。
————————————————————————————————————————
一 觸發器介紹
觸發器是一種特殊的存儲過程,它在插入,刪除或修改特定表中
的數據時觸發執行,它比數據庫本身標準的功能有更精細和更復雜的
數據控制能力。數據庫觸發器有以下的作用:
* 安全性。可以基於數據庫的值使用戶具有操作數據庫的某種權
利。
# 可以基於時間限制用戶的操作,例如不允許下班後和節假日
修改數據庫數據。
# 可以基於數據庫中的數據限制用戶的操作,例如不允許股票
的價格的升幅一次超過10%。
* 審計。可以跟蹤用戶對數據庫的操作。
# 審計用戶操作數據庫的語句。
# 把用戶對數據庫的更新寫入審計表。
* 實現複雜的數據完整性規則。
# 實現非標準的數據完整性檢查和約束。觸發器可產生比規則
更為複雜的限制。與規則不同,觸發器可以引用列或數據庫對
象。例如,觸發器可回退任何企圖吃進超過自己保證金的期貨。
# 提供可變的缺省值。
* 實現複雜的非標準的數據庫相關完整性規則。觸發器可以對數
據庫中相關的表進行連環更新。例如,在auths表author_code列上的
刪除觸發器可導致相應刪除在其它表中的與之匹配的行。
# 在修改或刪除時級聯修改或刪除其它表中的與之匹配的行。
# 在修改或刪除時把其它表中的與之匹配的行設成NULL值。
# 在修改或刪除時把其它表中的與之匹配的行級聯設成缺省值。
# 觸發器能夠拒絕或回退那些破壞相關完整性的變化,取消試
圖進行數據更新的事務。當插入一個與其主健不匹配的外部鍵
時,這種觸發器會起作用。例如,可以在books.author_code
列上生成一個插入觸發器,如果新值與auths.author_code列
中的某值不匹配時,插入被回退。
* 同步實時地複製表中的數據。
* 自動計算數據值,如果數據的值達到了一定的要求,則進行特
定的處理。例如,如果公司的帳號上的資金低於5萬元則立即給財務人
員發送警告數據。
ORACLE與SYBASE數據庫的觸發器有一定的區別,下面將分別講述
這兩種數據庫觸發器的作用和寫法。
二 ORACLE 觸發器
ORACLE產生數據庫觸發器的語法為......
數據庫觸發器中new表和old表是什麼意思?
顧名思義,new是新插入的數據,old是原來的數據
insert只會有new,代表著要插入的新記錄
delete只會有old,代表著要刪除的記錄
update由於執行的是先刪除舊的記錄,再插入新的記錄,因此new和old都會有,且含義與上面的相同
SQL數據庫中的觸發器怎麼寫啊?急
CREATE TRIGGER trig_stu_update ON student
FOR UPDATE
AS
begin
end;
CREATE TRIGGER trig_stu_delete O功 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的觸發器是幹什麼的,怎麼用?
觸發器的主要作用是,實現由主鍵和外鍵所不能保證的複雜的參照完整性和數據一致性。
例如我們日常生活中常用的銀行存儲系統就應用了觸發器機制:當我們在銀行辦理存款或是取款業務後,系統除了會記錄我們的交易信息外,還會根據我們存入或取出的金額自動更新我們帳戶的餘額(存款操作後增加帳戶餘額,取款操作後減少帳戶餘額),當操作中出現意外情況(如斷電),系統還會回滾我們所做的操作,以保證交易的完整性。
所以觸發器是在對錶進行插入、更新和刪除操作時自動執行的存儲過程,同時它也具有事務的功能(整個操作要麼全部成功,要麼全部失敗)。