當前位置:首頁 » 數據倉庫 » 資料庫觸發進程
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫觸發進程

發布時間: 2022-05-14 14:57:58

資料庫中Triggers的作用已經用法

TRIGGERS表提供了關於觸發程序的信息。

必須有SUPER許可權才能查看該表。

TRIGGER_SCHEMA和TRIGGER_NAME列中分別含有相應資料庫的名稱以及觸發程序的名稱,在該資料庫中,含有該觸發程序。

Mysql 5.1包含對觸發程序的支持。觸發程序是與表有關的命名資料庫對象,當表上出現特定事件時,將激活該對象。例如,下述語句將創建1個表和1個INSERT觸發程序。觸發程序將插入表中某一列的值加在一起:

mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
-> FOR EACH ROW SET @sum = @sum + NEW.amount;

CREATE TRIGGER語法
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
觸發程序是與表有關的命名資料庫對象,當表上出現特定事件時,將激活該對象。

觸發程序與命名為tbl_name的表相關。tbl_name必須引用永久性表。不能將觸發程序與TEMPORARY表或視圖關聯起來。

trigger_time是觸發程序的動作時間。它可以是BEFORE或AFTER,以指明觸發程序是在激活它的語句之前或之後觸發。

trigger_event指明了激活觸發程序的語句的類型。trigger_event可以是下述值之一:

· INSERT:將新行插入表時激活觸發程序,例如,通過INSERT、LOAD DATA和REPLACE語句。

· UPDATE:更改某一行時激活觸發程序,例如,通過UPDATE語句。

· DELETE:從表中刪除某一行時激活觸發程序,例如,通過DELETE和REPLACE語句。

請注意,trigger_event與以表操作方式激活觸發程序的SQL語句並不很類似,這點很重要。例如,關於INSERT的BEFORE觸發程序不僅能被INSERT語句激活,也能被LOAD DATA語句激活。

可能會造成混淆的例子之一是INSERT INTO .. ON DUPLICATE UPDATE ...語法:BEFORE INSERT觸發程序對於每一行將激活,後跟AFTER INSERT觸發程序,或BEFORE UPDATE和AFTER UPDATE觸發程序,具體情況取決於行上是否有重復鍵。

對於具有相同觸發程序動作時間和事件的給定表,不能有兩個觸發程序。例如,對於某一表,不能有兩個BEFORE UPDATE觸發程序。但可以有1個BEFORE UPDATE觸發程序和1個BEFORE INSERT觸發程序,或1個BEFORE UPDATE觸發程序和1個AFTER UPDATE觸發程序。

DROP TRIGGER語法
DROP TRIGGER [schema_name.]trigger_name
舍棄觸發程序。方案名稱(schema_name)是可選的。如果省略了schema(方案),將從當前方案中舍棄觸發程序。

② 資料庫觸發器有什麼作用

觸發器的作用:

自動計算數據值,如果數據的值達到了一定的要求,則進行特定的處理。

同步實時地復製表中的數據。

實現復雜的非標準的資料庫相關完整性規則。

可在寫入數據表前,強制檢驗或轉換數據。

觸發器發生錯誤時,異動的結果會被撤銷。

部分資料庫管理系統可以針對數據定義語言(DDL)使用觸發器,稱為DDL觸發器。

可依照特定的情況,替換異動的指令 (INSTEAD OF)。


(2)資料庫觸發進程擴展閱讀:

分類

SQL Server 包括三種常規類型的觸發器:DML 觸發器、DDL 觸發器和登錄觸發器。

DML觸發器

當資料庫中表中的數據發生變化時,包括insert,update,delete任意操作,如果我們對該表寫了對應的DML觸發器,那麼該觸發器自動執行。

DML觸發器的主要作用在於強制執行業 務規則,以及擴展Sql Server約束,默認值等。因為我們知道約束只能約束同一個表中的數據,而觸發器中則可以執行任意Sql命令。

DDL觸發器

它是Sql Server2005新增的觸發器,主要用於審核與規范對資料庫中表,觸發器,視圖等結構上的操作。比如在修改表,修改列,新增表,新增列等。

它在資料庫結構發生變化時執行,我們主要用它來記錄資料庫的修改過程,以及限製程序員對資料庫的修改,比如不允許刪除某些指定表等。

登錄觸發器

登錄觸發器將為響應 LOGIN 事件而激發存儲過程。與 SQL Server 實例建立用戶會話時將引發此事件。登錄觸發器將在登錄的身份驗證階段完成之後且用戶會話實際建立之前激發。

因此,來自觸發器內部且通常將到達用戶的所有消息(例如錯誤消息和來自 PRINT 語句的消息)會傳送到 SQL Server 錯誤日誌。如果身份驗證失敗,將不激發登錄觸發器。

參考資料來源:網路-觸發器

③ 在資料庫里怎麼使用觸發器

觸發器是一類特殊的存儲過程,開發人員也可以定義、編寫符合業務需求的觸發器來維護數據的完整性。觸發器的控制流程及控制語句與存儲過程相同,但觸發器與存儲過程還是有相當大的差別,觸發器的定義格式及開啟方式與存儲過程不同,作為數據管理員或編程人員,熟練掌握觸發器的用法對維護、操作資料庫非常重要。基本語法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

④ 資料庫正在被另一個進程使用問題,怎麼解決

別用附加數據了。。將資料庫備份成bak文件,然後新建一個資料庫,完全覆蓋就ok了。。這種情況是你的資料庫正在使用

⑤ SQl中觸發器怎樣執行的

先給你舉個觸發器的實例:
先創建兩個表
Create
Table
Student(
--學生表
StudentID
int
primary
key,
--學號
....
)
Create
Table
BorrowRecord(
--學生借書記錄表
BorrowRecord
int
identity(1,1),
--流水號
StudentID
int
,
--學號
BorrowDate
datetime,
--借出時間
ReturnDAte
Datetime,
--歸還時間
...
)
創建觸發器
Create
Trigger
truStudent
On
Student
--在Student表中創建觸發器
for
Update
--為什麼事件觸發,在這里就是修改的時候會執行這個觸發器,一旦你修改Student表,就會執行
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

⑥ 資料庫操作時什麼時候使用觸發器、什麼時候使用程序控制

你可以在觸發器里設置時間比較,例如,下面的例子說明中午12點以後才觸發。
SQL> create table test1
2 (
3 a number(10)
4 )
5 ;

Table created.

SQL>
SQL> create table test2
2 (
3 a number(10)
4 )
5 ;

Table created.

SQL> create or replace trigger test1_insert
2 after insert on test1
3 for each row
4 declare
5 -- local variables here
6 begin
7
8 If to_number(to_char(sysdate , 'hh24')) > 12 Then
9 insert into test2 values (:new.a);
10 end if ;
11
12 end test1_insert;
13 /

Trigger created.

SQL> select to_number(to_char(sysdate , 'hh24')) from al ;

TO_NUMBER(TO_CHAR(SYSDATE,'HH24'))
----------------------------------
14

SQL> insert into test1 values (1) ;

1 row created.

SQL> commit;

Commit complete.

SQL> select * from test2 ;

A
----------
1

SQL> select to_number(to_char(sysdate , 'hh24')) from al ;

TO_NUMBER(TO_CHAR(SYSDATE,'HH24'))
----------------------------------
4

SQL> insert into test1 values (2) ;

1 row created.

SQL> select * from test2 ;

A
----------
1

⑦ 資料庫中觸發器的作用是什麼

觸發器是資料庫提供給程序員和數據分析員來保證數據完整性的一種機制,它是一種與數據表事件相關的特殊的存儲過程。觸發器的執行不是由程序調用,也不需要手工開啟,而是由數據表上的事件來觸發,當用戶對一個數據表進行增、刪、改操作時就會激活它執行。

觸發器可以查詢其他表,而且可以包含復雜的SQL語句。它們主要用於強制服從復雜的業務規則或要求。觸發器也可用於強制引用完整性,以便在多個表中添加、更新或刪除行時,保留在這些表之間所定義的關系。

觸發器功能強大,可以輕松可靠地實現許多復雜的功能,但也不能過於依賴觸發器,濫用觸發器會造成關系資料庫及應用程序維護困難,性能、效率低下等問題的產生,在實際問題中,要根據實際需要選擇合適的解決方案。觸發器是一種特殊的存儲過程,在插入、刪除、修改特定表中的數據時觸發執行,擁有比資料庫本身更強大的數據控制能力,其作用有以下四大方面。

1.數據安全數據安全主要是指對信息系統中的業務數據提供一種數據變更的審核機制,當其通過安全策略的審核後,允許用戶變更相關數據,否則直接拒絕數據變更的請求。

安全原理:基於資料庫的值使用戶具有操作資料庫的某種權利。

((1)可以基於時間限制用戶的操作。例如,不允許下班後和節假日修改資料庫數據。

(2)可以基於資料庫中的數據限制用戶的操作。例如,不允許股票價格的升幅一次超過10%。

2.數據審計數據審計主要是指對數據伺服器上的記錄進行變更時的一種用戶許可權的即時審查與用戶行為的全方位記錄,以便事後對數據變更過程的追溯,保證數據變更的合法性。

審計原理:跟蹤用戶對資料庫的操作。

((1)審計用戶操作資料庫的語句。

(2)把用戶對資料庫的更新寫入審計表。

3.數據約束數據約束是指對用戶的操作行為將導致業務數據與實際情況相悖的行為進行檢查約束,而不讓其發生,從而保證數據的完整性與一致性。

約束原理:對用戶操作與實際邏輯的約束檢查。

((1)實現數據完整性檢查和約束。例如,回退任何企圖買進超過自己資金的貨物。

(2)提供可變的預設值。

4.數據連環更新數據連環更新是指當對數據進行更新操作時,將所有與此數據相關聯的數據作聯合的更新操作,以保證數據的完整性與一致性。

連環更新原理:對關聯數據作聯合更新操作。

((1)修改或刪除時級聯修改或刪除其他表中與之匹配的行。

(2)修改或刪除時把其他表中與之匹配的行設成NULL值。

(3)修改或刪除時把其他表中與之匹配的行級聯設成預設值。

⑧ 資料庫變化能否觸發應用程序

很簡單,只要掃描資料庫的操作記錄。就是那個用於恢復資料庫的記錄。
當看到有新的記錄時,就說明有了某種操作。
要不就是在自己設計資料庫,給他分配一個中斷。
要得到這種信息,就只有這兩種辦法,要麼中斷,要麼掃描。

朋友,SQL就是一種查詢語言,就是要你去詢問,它才有信息返回給你。如果你要伺服器主動發資料庫改變的信息給你,除非你在伺服器端安裝自己設計(過程化的,區別於SQL的非過程)的程序。
mysql當然沒有這種功能。

如果你是實時的,那可以每段時間就要求伺服器發送記錄表給你的終端,你再掃描表。

⑨ 請問:資料庫中的觸發器是用來做什麼的

觸發器是一種特殊類型的存儲過程,當使用下面的一種或多種數據修改操作在指定表中對數據進行修改時,觸發器會生效:UPDATE、INSERT 或 DELETE。觸發器可以查詢其它表,而且可以包含復雜的 SQL 語句。它們主要用於強制復雜的業務規則或要求。例如,可以控制是否允許基於顧客的當前帳戶狀態插入定單。

觸發器還有助於強制引用完整性,以便在添加、更新或刪除表中的行時保留表之間已定義的關系。然而,強制引用完整性的最好方法是在相關表中定義主鍵和外鍵約束。如果使用資料庫關系圖,則可以在表之間創建關系以自動創建外鍵約束。有關詳細信息,請參見表關系。

使用觸發器的優點
觸發器的優點如下:

觸發器是自動的:它們在對表的數據作了任何修改(比如手工輸入或者應用程序採取的操作)之後立即被激活。

觸發器可以通過資料庫中的相關表進行層疊更改。例如,可以在 titles 表的 title_id 列上寫入一個刪除觸發器,以使其它表中的各匹配行採取刪除操作。該觸發器用 title_id 列作為唯一鍵,在 titleauthor、sales 及 roysched 表中對各匹配行進行定位。

觸發器可以強制限制,這些限制比用 CHECK 約束所定義的更復雜。與 CHECK 約束不同的是,觸發器可以引用其它表中的列。例如,觸發器可以回滾試圖對價格低於 10 美元的書(存儲在 titles 表中)應用折扣

⑩ 關於SQLserver資料庫的進程問題

一般來說SQL的進程有幾個
SQL
BROWSER
你的客戶端連接的進程
SQLSERVR你的資料庫實例的主服務
SQLWB
這是你啟動MANAGER
STUDIO後產生的進程
SQLWRITER
省略
SQLAGENT
省略
似乎是這些,我也記不清楚了
如果你設置成手動,那麼你設置的這些服務不會啟動,但是進程上會存在。特別是SQLSERVR(其他的我沒注意),此時你觀察它的內存使用量,雖然不算特別大,但是也夠大了。但你啟動你的SQL
SERVER時,內存使用量會增加很多。(我理解是此時連接了你的伺服器,所以要佔用內存)
而當你關閉了SQLSERVER以後,內存使用量並不會減少太多,說明你的伺服器依舊在運行。
所以根據我的這個觀察,我覺得,你將
服務設置手動,只是設置了該伺服器的實例不會自動運行。而不是SQL
SERVER這個軟體不會自動運行。
如果真的要全部停止服務的話。似乎你用SQL
SERVER
CONFIGURATION
來設置服務應該可以實現你的要求/