當前位置:首頁 » 編程語言 » sql如何使用觸發器

sql如何使用觸發器

發布時間: 2022-07-02 14:08:58

sql觸發器的使用

觸發器在程序中不直接使用,而是你在程序中的某個SQL語句調用了觸發器,觸發器是你寫在資料庫的表中的,比如insert觸發器,當你在程序中執行了insert語句,就可能會觸發到該觸發器。
存儲過程是exec+存儲名稱+參數(可選),在程序中,直接執行即可,注意參數的輸入就行了。

希望以上回答對你有所幫助,建議你多看看sql語法,對你以後的資料庫編程會有很大幫助的。 祝你成功!

Ⅱ 請問sql觸發器insert觸發器如何使用

DML觸發器有三類:
1, insert觸發器;
2, update觸發器;
3, delete觸發器;
觸發器的組成部分:
觸發器的聲明,指定觸發器定時,事件,表名以類型
觸發器的執行,PL/SQL塊或對過程的調用
觸發器的限制條件,通過where子句實現
類型:
應用程序觸發器,前台開發工具提供的;
資料庫觸發器,定義在資料庫內部由某種條件引發;分為:
DML觸發器;
資料庫級觸發器;
替代觸發器;
DML觸發器組件:
1,觸發器定時
2,觸發器事件
3,表名
4, 觸發器類型
5, When子句
6, 觸發器主體
可創建觸發器的對象:資料庫表,資料庫視圖,用戶模式,資料庫實例
創建DML觸發器:
Create [or replace] trigger [模式.]觸發器名
Before| after insert|delete|(update of 列名)
On 表名
[for each row]
When 條件
PL/SQL塊
For each row的意義是:在一次操作表的語句中,每操作成功一行就會觸發一次;不寫的話,表示是表級觸發器,則無論操作多少行,都只觸發一次;
When條件的出現說明了,在DML操作的時候也許一定會觸發觸發器,但是觸發器不一定會做實際的工作,比如when 後的條件不為真的時候,觸發器只是簡單地跳過了PL/SQL塊;
Insert觸發器的創建:
create or replace trigger tg_insert
before insert on student
begin
dbms_output.put_line('insert trigger is chufa le .....');
end;
執行的效果:
SQL> insert into student
2 values(202,'dongqian','f');
insert trigger is chufa le .....
update表級觸發器的例子:
create or replace trigger tg_updatestudent
after update on student
begin
dbms_output.put_line('update trigger is chufale .....');
end;
運行效果:
SQL> update student set se='f';
update trigger is chufale .....
已更新8行;
可見,表級觸發器在更新了多行的情況下,只觸發了一次;

Ⅲ sql 觸發器的使用方法

深刻理解 FOR CREATE TRIGGER 語句的 FOR 關鍵字之後可以跟 INSERT、UPDATE、DELETE 中的一個或多個,也就是說在其它情況下是不會觸發觸發器的, 包括 SELECT、TRUNCATE、WRITETEXT、UPDATETEXT。
相關內容 一個有趣的應用我們看到許多注冊系統在注冊後都不能更改用戶名,但這多半是由應用程序決定的, 如果直接打開資料庫表進行更改,同樣可以更改其用戶名, 在觸發器中利用回滾就可以巧妙地實現無法更改用戶名……詳細內容 觸發器內部語句出錯時…… 這種情況下,前面對數據更改操作將會無效。舉個例子,在表中插入數據時觸發觸發器,而觸發器內部此時發生了運行時錯誤,那麼將返回一個錯誤值,並且拒絕剛才的數據插入。不能在觸發器中使用的語句 觸發器中可以使用大多數 T-SQL 語句,但如下一些語句是不能在觸發器中使用的。
CREATE 語句,如:CREATE DATABASE、CREATE TABLE、CREATE INDEX 等。
ALTER 語句,如:ALTER DATABASE、ALTER TABLE、ALTER INDEX 等。
DROP 語句,如:DROP DATABASE、DROP TABLE、DROP INDEX 等。
DISK 語句,如:DISK INIT、DISK RESIZE。
LOAD 語句,如:LOAD DATABASE、LOAD LOG。
RESTORE 語句,如:RESTORE DATABASE、RESTORE LOG。
RECONFIGURE TRUNCATE TABLE 語句在sybase的觸發器中不可使用!

Ⅳ SQL觸發器如何使用

CREATE TRIGGER
創建觸發器,觸發器是一種特殊的存儲過程,在用戶試圖對指定的表執行指定的數據修改語句時自動執行。Microsoft® SQL Server™ 允許為任何給定的 INSERT、UPDATE 或 DELETE 語句創建多個觸發器。

語法
CREATE TRIGGER trigger_name
ON { table | view }
[ WITH ENCRYPTION ]
{

{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }

[ WITH APPEND ]

[ NOT FOR REPLICATION ]

AS

[ { IF UPDATE ( column )

[ { AND | OR } UPDATE ( column ) ]

[ ...n ]

| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )

{ comparison_operator } column_bitmask [ ...n ]

} ]

sql_statement [ ...n ]

}
}

參數
trigger_name

是觸發器的名稱。觸發器名稱必須符合標識符規則,並且在資料庫中必須唯一。可以選擇是否指定觸發器所有者名稱。

Table | view

是在其上執行觸發器的表或視圖,有時稱為觸發器表或觸發器視圖。可以選擇是否指定表或視圖的所有者名稱。

WITH ENCRYPTION

加密 syscomments 表中包含 CREATE TRIGGER 語句文本的條目。使用 WITH ENCRYPTION 可防止將觸發器作為 SQL Server 復制的一部分發布。

AFTER

指定觸發器只有在觸發 SQL 語句中指定的所有操作都已成功執行後才激發。所有的引用級聯操作和約束檢查也必須成功完成後,才能執行此觸發器。

如果僅指定 FOR 關鍵字,則 AFTER 是默認設置。

不能在視圖上定義 AFTER 觸發器。

INSTEAD OF

指定執行觸發器而不是執行觸發 SQL 語句,從而替代觸發語句的操作。

在表或視圖上,每個 INSERT、UPDATE 或 DELETE 語句最多可以定義一個 INSTEAD OF 觸發器。然而,可以在每個具有 INSTEAD OF 觸發器的視圖上定義視圖。

INSTEAD OF 觸發器不能在 WITH CHECK OPTION 的可更新視圖上定義。如果向指定了 WITH CHECK OPTION 選項的可更新視圖添加 INSTEAD OF 觸發器,SQL Server 將產生一個錯誤。用戶必須用 ALTER VIEW 刪除該選項後才能定義 INSTEAD OF 觸發器。

{ [DELETE] [,] [INSERT] [,] [UPDATE] }

是指定在表或視圖上執行哪些數據修改語句時將激活觸發器的關鍵字。必須至少指定一個選項。在觸發器定義中允許使用以任意順序組合的這些關鍵字。如果指定的選項多於一個,需用逗號分隔這些選項。

對於 INSTEAD OF 觸發器,不允許在具有 ON DELETE 級聯操作引用關系的表上使用 DELETE 選項。同樣,也不允許在具有 ON UPDATE 級聯操作引用關系的表上使用 UPDATE 選項。

WITH APPEND

指定應該添加現有類型的其它觸發器。只有當兼容級別是 65 或更低時,才需要使用該可選子句。如果兼容級別是 70 或更高,則不必使用 WITH APPEND 子句添加現有類型的其它觸發器(這是兼容級別設置為 70 或更高的 CREATE TRIGGER 的默認行為)。有關更多信息,請參見 sp_dbcmptlevel。

WITH APPEND 不能與 INSTEAD OF 觸發器一起使用,或者,如果顯式聲明 AFTER 觸發器,也不能使用該子句。只有當出於向後兼容而指定 FOR 時(沒有 INSTEAD OF 或 AFTER),才能使用 WITH APPEND。以後的版本將不支持 WITH APPEND 和 FOR(將被解釋為 AFTER)。

NOT FOR REPLICATION

表示當復制進程更改觸發器所涉及的表時,不應執行該觸發器。

AS

是觸發器要執行的操作。

sql_statement

是觸發器的條件和操作。觸發器條件指定其它准則,以確定 DELETE、INSERT 或 UPDATE 語句是否導致執行觸發器操作。

當嘗試 DELETE、INSERT 或 UPDATE 操作時,Transact-SQL語句中指定的觸發器操作將生效。

觸發器可以包含任意數量和種類的 Transact-SQL 語句。觸發器旨在根據數據修改語句檢查或更改數據;它不應將數據返回給用戶。觸發器中的 Transact-SQL 語句常常包含控制流語言。CREATE TRIGGER 語句中使用幾個特殊的表:

deleted 和 inserted 是邏輯(概念)表。這些表在結構上類似於定義觸發器的表(也就是在其中嘗試用戶操作的表);這些表用於保存用戶操作可能更改的行的舊值或新值。例如,若要檢索 deleted 表中的所有值,請使用:
SELECT *
FROM deleted

如果兼容級別等於 70,那麼在 DELETE、INSERT 或 UPDATE 觸發器中,SQL Server 將不允許引用 inserted 和 deleted 表中的 text、ntext 或 image 列。不能訪問 inserted 和 deleted 表中的 text、ntext 和 image 值。若要在 INSERT 或 UPDATE 觸發器中檢索新值,請將 inserted 表與原始更新表聯接。當兼容級別是 65 或更低時,對 inserted 或 deleted 表中允許空值的text、ntext 或 image 列,將返回空值;如果這些列不可為空,則返回零長度字元串。
當兼容級別是 80 或更高時,SQL Server 允許在表或視圖上通過 INSTEAD OF 觸發器更新 text、ntext 或 image 列。

n
是表示觸發器中可以包含多條 Transact-SQL 語句的佔位符。對於 IF UPDATE (column) 語句,可以通過重復 UPDATE (column) 子句包含多列。

IF UPDATE (column)

測試在指定的列上進行的 INSERT 或 UPDATE 操作,不能用於 DELETE 操作。可以指定多列。因為在 ON 子句中指定了表名,所以在 IF UPDATE 子句中的列名前不要包含表名。若要測試在多個列上進行的 INSERT 或 UPDATE 操作,請在第一個操作後指定單獨的 UPDATE(column) 子句。在 INSERT 操作中 IF UPDATE 將返回 TRUE 值,因為這些列插入了顯式值或隱性 (NULL) 值。

說明 IF UPDATE (column) 子句的功能等同於 IF、IF...ELSE 或 WHILE 語句,並且可以使用 BEGIN...END 語句塊。有關更多信息,請參見控制流語言。

可以在觸發器主體中的任意位置使用 UPDATE (column)。

column

是要測試 INSERT 或 UPDATE 操作的列名。該列可以是 SQL Server 支持的任何數據類型。但是,計算列不能用於該環境中。有關更多信息,請參見數據類型。
<br

Ⅳ 如何在SQLServer中使用觸發器觸發器主要優點

觸發器的優點: 以事件方式來處理. 當數據發生變化的時候, 自動作處理.
缺點: 當資料庫之間 導出導入的時候, 可能會引起不必要的觸發邏輯.
存貯速度和執行速度: 代碼是存儲在伺服器上, 執行速度主要取決於 資料庫伺服器的性能與觸發器代碼的復雜程度。

Ⅵ sql server2012如何建立觸發器

  • 首先你當然要有一個資料庫了,這里我使用自己創建的資料庫booksDB。

    在資料庫booksDB上創建觸發器,右擊觸發器->新建觸發器,打開之後的界面如下所示

  • 6

    資料庫的增刪改查類似

c語言怎麼使用sql觸發器

c語言怎麼使用sql觸發器:
定義: 何為觸發器?在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 trdStudent
On Student
for Delete
As
Delete BorrowRecord
From BorrowRecord br , Delted d
Where br.StudentID=d.StudentID

從這兩個例子我們可以看到了觸發器的關鍵:A.2個臨時的表;B.觸發機制。

Ⅷ 如何使用sql觸發器

CREATE OR REPLACE TRIGGER INSERT_STU_TRIGGER
BEFORE INSERT ON STUDENT
FOR EACH ROW
DECLARE
v_alone_course number;
v_total_course number;
v_TRUEANSWER varchar2(20);
v_t1 number;
BEGIN
select j.題目編號1 into v_t1 from juanzi j where j.卷號=:new.卷號;
select t.分值,t.TRUEANSWER into v_alone_course,v_TRUEANSWER from timu t where t."題目編號"=v_t1;
if v_trueanswer = :new.答案1 then
select v_alone_course into :new.成績 from al;
end if;
END;
這個是按照你的需求寫的一個ORACLE資料庫的SQL語句。
下面這個是測試添加語句:
insert into student(學號,教師工號,卷號,答案1) VALUES(123456,40564,1001,'A');

Ⅸ MSSQL觸發器如何使用

use
database
name
Alter
Table
t
Disable
Trigger
ALL
(關閉觸發器)
insert
into
t
select
*
From
t2
(各類操作語句)
/*
delete
t
where......
*/
/*
update
t
set...
where...*/
Alter
Table
t
Enable
Trigger
ALL
(打開觸發器)
以上是在插入、更改、刪除數據之前把針對表T的觸發器關閉,操作表T的時候就不會再受觸發器的干擾了,等這些操作完成後再把觸發器打開。但是關閉觸發器之前,得考慮周全,確定後面的操作不會對數據產生影響.
因為觸發器能維持表之間的數據完整性和一致性,它的作用很重要.

熱點內容
氧化鋅為什麼可以直接配置 發布:2022-08-19 17:02:03 瀏覽:723
struts2上傳文件進度條 發布:2022-08-19 17:01:21 瀏覽:36
too密碼是多少 發布:2022-08-19 16:58:18 瀏覽:248
適合ftp的文件組織目錄結構 發布:2022-08-19 16:53:16 瀏覽:13
我的世界裡如何獲得伺服器 發布:2022-08-19 16:50:23 瀏覽:707
一般的伺服器電腦 發布:2022-08-19 16:48:54 瀏覽:355
安卓怎麼看dpi 發布:2022-08-19 16:48:00 瀏覽:279
新媒體編程 發布:2022-08-19 16:43:46 瀏覽:26
我的世界手游版推薦伺服器 發布:2022-08-19 16:43:36 瀏覽:266
電腦清空緩存 發布:2022-08-19 16:43:33 瀏覽:152