MM131美女爱做视频在线看_性强烈的欧美三级视频_男女性潮高清免费网站_日日摸日日碰夜夜爽歪歪

IT培訓(xùn)-高端面授IT培訓(xùn)機(jī)構(gòu)
云和教育:云和數(shù)據(jù)集團(tuán)高端IT職業(yè)教育品牌
  • 國(guó)家級(jí)
    全民數(shù)字素養(yǎng)與技能培訓(xùn)基地
  • 河南省
    第一批產(chǎn)教融合型企業(yè)建設(shè)培育單位
  • 鄭州市
    數(shù)字技能人才(碼農(nóng))培養(yǎng)評(píng)價(jià)聯(lián)盟

Sql Server 觸發(fā)器實(shí)現(xiàn)多表之間同步增加、刪除與更新

  • 發(fā)布時(shí)間:
    2016-10-12
  • 版權(quán)所有:
    云和教育
  • 分享:

Sql Server?觸發(fā)器實(shí)現(xiàn)多表之間同步增加、刪除與更新

定義: 何為觸發(fā)器?在SQL Server里面也就是對(duì)某一個(gè)表的一定的操作,觸發(fā)某種條件,從而執(zhí)行的一段程序。觸發(fā)器是一個(gè)特殊的存儲(chǔ)過(guò)程。

常見(jiàn)的觸發(fā)器有三種:分別應(yīng)用于Insert , Update , Delete 事件。(SQL Server 2000定義了新的觸發(fā)器,這里不提)

我為什么要使用觸發(fā)器?比如,這么兩個(gè)表:

Create Table Student(?????????????–學(xué)生表

StudentID int primary key,??????–學(xué)號(hào)

….

)

Create Table BorrowRecord(??????????????–學(xué)生借書(shū)記錄表

BorrowRecord??int identity(1,1),??????–流水號(hào)

StudentID?????int ,???????????????????–學(xué)號(hào)

BorrowDate????datetime,???????????????–借出時(shí)間

ReturnDAte????Datetime,???????????????–歸還時(shí)間

)

分別創(chuàng)建增加、刪除、更新的觸發(fā)器(Trigger)來(lái)達(dá)到兩張表之間數(shù)據(jù)同步的目的。

1:數(shù)據(jù)同步增加:

如有兩張表——A表和B表,創(chuàng)建觸發(fā)器使當(dāng)A表插入數(shù)據(jù)后B表也同步插入數(shù)據(jù)。其中B表插入數(shù)據(jù)的字段需要同A表中的字段相對(duì)應(yīng)。

CREATE TRIGGER 觸發(fā)器名稱(chēng)

ON A表

AFTER INSERT

AS BEGIN INSERT INTO

B表(B表字段1,B表字段2,B表字段3)

SELECT A表字段1,A表字段2,A表字段3

FROM INSERTED

END

2.數(shù)據(jù)同步刪除:

如有兩張表——A表和B表,創(chuàng)建觸發(fā)器使當(dāng)A表刪除數(shù)據(jù)后B表也同步刪除數(shù)據(jù)。其中B表與A表應(yīng)有相應(yīng)主鍵關(guān)聯(lián)。

CREATE TRIGGER 觸發(fā)器名稱(chēng)

ON A表

AFTER DELETE

AS BEGIN DELETE B表

WHERE

B表主鍵 IN(

SELECT A表主鍵

FROM DELETED)

END

3.數(shù)據(jù)同步更新:

如有兩張表——A表和B表,創(chuàng)建觸發(fā)器使當(dāng)A表數(shù)據(jù)更新后B表也同步更新數(shù)據(jù)。

CREATE TRIGGER 觸發(fā)器名稱(chēng)

ON A表

AFTER UPDATE

AS

update B表

SET

B.B表字段1=A.A表字段1

FROM

B表 AS B,INSERTED AS A

WHERE B.B表主鍵=A.A表主鍵

我為什么要使用觸發(fā)器?比如,這么兩個(gè)表:

Create Table Student(?????????????–學(xué)生表

StudentID int primary key,??????–學(xué)號(hào)

….

)

Create Table BorrowRecord(??????????????–學(xué)生借書(shū)記錄表

BorrowRecord??int identity(1,1),??????–流水號(hào)

StudentID?????int ,???????????????????–學(xué)號(hào)

BorrowDate????datetime,???????????????–借出時(shí)間

ReturnDAte????Datetime,???????????????–歸還時(shí)間

)

用到的功能有:

1.如果我更改了學(xué)生的學(xué)號(hào),我希望他的借書(shū)記錄仍然與這個(gè)學(xué)生相關(guān)(也就是同時(shí)更改借書(shū)記錄表的學(xué)號(hào));

2.如果該學(xué)生已經(jīng)畢業(yè),我希望刪除他的學(xué)號(hào)的同時(shí),也刪除它的借書(shū)記錄。

等等。

這時(shí)候可以用到觸發(fā)器。對(duì)于1,創(chuàng)建一個(gè)Update觸發(fā)器:

Create Trigger truStudent

On Student????????????????????????–在Student表中創(chuàng)建觸發(fā)器

for Update?????????????????????????–為什么事件觸發(fā)

As???????????????????????????????????????–事件觸發(fā)后所要做的事情

if Update(StudentID)

begin

Update BorrowRecord

Set StudentID=i.StudentID

From BorrowRecord br , Deleted??d ,Inserted i?????–Deleted和Inserted臨時(shí)表

Where br.StudentID=d.StudentID

end

理解觸發(fā)器里面的兩個(gè)臨時(shí)的表:Deleted , Inserted 。注意Deleted 與Inserted分別表示觸發(fā)事件的表“舊的一條記錄”和“新的一條記錄”。

一個(gè)數(shù)據(jù)庫(kù)教程系統(tǒng)中有兩個(gè)虛擬表用于存儲(chǔ)在表中記錄改動(dòng)的信息,分別是:

虛擬表Inserted????????????????????虛擬表Deleted

在表記錄新增時(shí)????存放新增的記錄????????????????????????不存儲(chǔ)記錄

修改時(shí)??????????存放用來(lái)更新的新記錄??????????????????存放更新前的記錄

刪除時(shí)??????????不存儲(chǔ)記錄????????????????????????????存放被刪除的記錄

一個(gè)Update 的過(guò)程可以看作為:生成新的記錄到Inserted表,復(fù)制舊的記錄到Deleted表,然后刪除Student記錄并寫(xiě)入新紀(jì)錄。

對(duì)于2,創(chuàng)建一個(gè)Delete觸發(fā)器

Create trigger trdStudent

On Student

for Delete

As

Delete BorrowRecord

From BorrowRecord br , Delted d

Where br.StudentID=d.StudentID

從這兩個(gè)例子我們可以看到了觸發(fā)器的關(guān)鍵:A.2個(gè)臨時(shí)的表;B.觸發(fā)機(jī)制。

這里我們只講解最簡(jiǎn)單的觸發(fā)器。復(fù)雜的容后說(shuō)明。