數(shù)據(jù)庫完整性教學(xué)課件_第1頁
數(shù)據(jù)庫完整性教學(xué)課件_第2頁
數(shù)據(jù)庫完整性教學(xué)課件_第3頁
數(shù)據(jù)庫完整性教學(xué)課件_第4頁
數(shù)據(jù)庫完整性教學(xué)課件_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、2022/10/121數(shù)據(jù)庫系統(tǒng)概論An Introduction to Database System第五章 數(shù)據(jù)庫完整性2022/10/101數(shù)據(jù)庫系統(tǒng)概論第五章 數(shù)據(jù)庫完整性什么是數(shù)據(jù)庫的完整性1)數(shù)據(jù)的正確性和相容性2)防止不合語義的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫。例: 學(xué)生的年齡必須是整數(shù),取值范圍為14-29; 學(xué)生的性別只能是男或女; 學(xué)生的學(xué)號一定是唯一的; 學(xué)生所在的系必須是學(xué)校開設(shè)的系;3)完整性:是否真實地反映現(xiàn)實世界第五章 數(shù)據(jù)庫完整性什么是數(shù)據(jù)庫的完整性完整性控制機(jī)制1.完整性約束條件定義機(jī)制2.完整性檢查機(jī)制一般在INSERT, UPDATE, DELETE執(zhí)行后開始檢查,也可以在

2、事務(wù)提交時檢查。3.違約處理 拒絕或級聯(lián)執(zhí)行等。 完整性控制機(jī)制1.完整性約束條件定義機(jī)制第五章 數(shù)據(jù)庫完整性5.1 實體完整性5.2 參照完整性5.3 用戶定義的完整性5.4 完整性約束命名子句5.6 觸發(fā)器5.7 小結(jié)第五章 數(shù)據(jù)庫完整性5.1 實體完整性5.1實體完整性5.1.1實體完整性定義PRIMARY KEY定義,表級完整性約束或列級完整性約束5.1實體完整性5.1.1實體完整性定義數(shù)據(jù)庫完整性教學(xué)課件5.1.2實體完整性檢查和違約處理 每當(dāng)用戶程序?qū)颈聿迦胍粭l記錄或者對主碼列進(jìn)行更新操作時,按照實體完整性規(guī)則,系統(tǒng)將進(jìn)行檢查:主碼值是否唯一,如果不唯一則拒絕插入或修改主碼各屬

3、性是否為空,只要有一個為空就拒絕插入或修改方法:全表掃描或者索引查找(一般在主碼上自動建立一個索引)5.1.2實體完整性檢查和違約處理5.2參照完整性5.2.1參照完整性定義創(chuàng)建表時,FOREIGN KEY定義5.2.2參照完整性檢查和違約處理以SC和S為例,四種情況:SC中增加一個元組,而在student中找不到相應(yīng)的元組修改SC中的一個元組從student刪除一個元組修改student中的一個元組5.2參照完整性5.2.1參照完整性定義5.2.2 參照完整性檢查和違約處理當(dāng)上述的不一致發(fā)生時,系統(tǒng)可以采用以下的策略:1 拒絕(No Action)執(zhí)行 不允許該操作執(zhí)行。該策略一般設(shè)置為默認(rèn)

4、策略。2 級聯(lián)(Cascade)操作 當(dāng)刪除或修改被參照表(Student)的一個元組造成了與參照表(SC)的不一致,則刪除或修改參照表中的所有造成不一致的元組。 例如:刪除Student表中的元組,Sno的值為200215121,則從要SC表中級聯(lián)刪除SC.Sno=200215121的所有元組。5.2.2 參照完整性檢查和違約處理當(dāng)上述的不一致發(fā)生時,系5.2.2 參照完整性檢查和違約處理設(shè)置為空值當(dāng)刪除或修改被參照表的一個元組時造成了不一致,則將參照表中的所有造成不一致的元組對應(yīng)屬性設(shè)置為空值。例:5.2.2 參照完整性檢查和違約處理設(shè)置為空值5.2.2 參照完整性檢查和違約處理因此,對于

5、參照完整性,除了應(yīng)該定義外碼,還應(yīng)定義外碼列是否允許空值。一般,當(dāng)對參照表和被參照表的操作違反了參照完整性,系統(tǒng)選用默認(rèn)策略,即拒絕執(zhí)行。如果想讓系統(tǒng)采用其他的策略則必須在創(chuàng)建表的時候顯示地加以說明。5.2.2 參照完整性檢查和違約處理因此,對于參照完整性顯示說明參照完整性的違約處理 ON DELETE NO ACTION | CASCADE | SET NULL | SET DEFAULT ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT 顯示說明參照完整性的違約處理 ON DELETE N5.3用戶定義的完整性5.3.1屬性上的約

6、束條件的定義列值非空(Not Null);列值唯一(Unique);檢查列值是否滿足布爾表達(dá)式(CHECK);5.3.2屬性上的約束條件檢查和違約處理 當(dāng)往表中插入元組或修改屬性的值時,檢查屬性上的約束是否被滿足,如果不滿足則操作被拒絕執(zhí)行。5.3.3元組上的約束條件的定義CHECK短語(同屬性值限制相比,元組級的限制可以設(shè)置不同屬性之間的取值的相互約束條件)5.3.4元組上的約束條件檢查和違約處理 當(dāng)往表中插入元組或修改屬性的值時,檢查屬性上的約束是否被滿足,如果不滿足則操作被拒絕執(zhí)行。5.3用戶定義的完整性5.3.1屬性上的約束條件的定義5.3用戶定義的完整性5.3用戶定義的完整性5.3用

7、戶定義的完整性5.3用戶定義的完整性5.6觸發(fā)器觸發(fā)器的基礎(chǔ)知識 觸發(fā)器是一種特殊的存儲過程,是SQL Server為保證數(shù)據(jù)完整性、確保系統(tǒng)正常工作而設(shè)置的一種高級技術(shù)。觸發(fā)器在特定的表上定義,該表也稱為觸發(fā)器表。當(dāng)觸發(fā)器所保護(hù)的數(shù)據(jù)發(fā)生變化時,觸發(fā)器就會自動運行,以保證數(shù)據(jù)的完整性與正確性。5.6觸發(fā)器觸發(fā)器的基礎(chǔ)知識1.觸發(fā)器有如下作用: 1)可以對數(shù)據(jù)庫進(jìn)行級聯(lián)修改。2)可以完成比CHECK更復(fù)雜的約束。與CHECK約束不 同,在觸發(fā)器中可以引用其他的表。3)根據(jù)改變前后表中不同的數(shù)據(jù)進(jìn)行相應(yīng)的操作。4)對于一個表上的不同的操作(INSERT、UPDATE或 DELETE)可以采用不同

8、的觸發(fā)器,即使是對相同的 語句也可以調(diào)用不同的觸發(fā)器完成不同的操作。 1.觸發(fā)器有如下作用: 在創(chuàng)建數(shù)據(jù)表時,已經(jīng)定義了各字段的類型及其他約束條件,比如主鍵、外鍵關(guān)系等。這些作為預(yù)選過濾,在數(shù)據(jù)寫入數(shù)據(jù)庫之前就會被校驗,只有當(dāng)這些校驗全都通過后,觸發(fā)器才會執(zhí)行。如果前面的這些校驗沒有全部通過,觸發(fā)器就不會執(zhí)行。因為觸發(fā)器是在操作之后才執(zhí)行。 在創(chuàng)建數(shù)據(jù)表時,已經(jīng)定義了各字段的類型及其他約束條件 2.觸發(fā)器具有以下特點:1)它是在操作有效后才執(zhí)行的,即其他約束優(yōu)先于 觸發(fā)器。2)它與存儲過程的不同之處在于存儲過程可以由用 戶直接調(diào)用,而觸發(fā)器不能被直接調(diào)用,是由事 件觸發(fā)的。3)一個表可以有多個

9、觸發(fā)器,在不同表上同一種類 型的觸發(fā)器也可以有多個。4)觸發(fā)器允許嵌套,最多為32層。5)觸發(fā)器可以提高對表及表行有級聯(lián)操作的應(yīng)用程 序的性能。 2.觸發(fā)器具有以下特點:1)它是在操作有效后才執(zhí)行的,即其 觸發(fā)器定義之后,其名稱存儲于sysobjects表中,定義語句存儲在syscomments表中。 定義觸發(fā)器的Transact-SQL語句中不能出現(xiàn)以下語句,否則SQL Server將拒絕編譯、存儲這些語句相關(guān)的觸發(fā)器。 所有的CREATE命令 所有的DROP命令 ALTER TABLE和ALTER DATABASE命令 TRUNCATE TABLE命令(刪除表中所有行) GRANT和REV

10、OKE命令 UPDATE STATISTICS命令 SELECT INTO命令等。(創(chuàng)建表將結(jié)果集填充) 觸發(fā)器定義之后,其名稱存儲于sysobjects 在創(chuàng)建觸發(fā)器時,還要遵循以下原則: 觸發(fā)器的定義必須是批處理的第一條 命令。 (2) 觸發(fā)器只能在表上定義。(3) 觸發(fā)器不能處理TEXT和IMAGE數(shù)據(jù)類型的 大型二進(jìn)制對象表列。(4) 建議不要使用觸發(fā)器返回一個結(jié)果集。 在創(chuàng)建觸發(fā)器時,還要遵循以下原則: 3. 觸發(fā)器的類型 在SQL Server 2008中,根據(jù)激活觸發(fā)器執(zhí)行的T-SQL語句類型,可以把觸發(fā)器分為兩類:DML觸發(fā)器 當(dāng)數(shù)據(jù)庫服務(wù)器中發(fā)生數(shù)據(jù)操作語言(Data Man

11、ipulation Language)事件(Insert, Update, Delete)時執(zhí)行的存儲過程。DDL觸發(fā)器 響應(yīng)數(shù)據(jù)定義語言(Data Definition Language)事件(Create,Alter,Drop)時執(zhí)行的存儲過程。 3. 觸發(fā)器的類型DML觸發(fā)器DML觸發(fā)器根據(jù)引起觸發(fā)時間的不同可分為After觸發(fā)器(后觸發(fā)器)和Instead Of觸發(fā)器(替代觸發(fā)器)After觸發(fā)器(后觸發(fā)器) 在記錄已經(jīng)改變完后(執(zhí)行完insert, update或delete和處理完約束后)才被激活執(zhí)行,主要用于記錄變更后的處理或檢查,一旦發(fā)現(xiàn)錯誤,也可以用Rollback Tran

12、saction語句來回滾本次操作。Instead Of觸發(fā)器(替代觸發(fā)器) 用來取代原本要進(jìn)行的操作,在記錄變更之前發(fā)生的,不執(zhí)行原來SQL語句里的操作,而是代替insert, update, delete語句去執(zhí)行觸發(fā)器本身所定義的操作。DML觸發(fā)器DML觸發(fā)器根據(jù)引起觸發(fā)時間的不同可分為AfteDML觸發(fā)器DML觸發(fā)器與表和視圖是不能分開的,觸發(fā)器定義在表和視圖中,當(dāng)表或視圖中執(zhí)行insert, update, delete操作時觸發(fā)器被觸發(fā)并自動執(zhí)行。當(dāng)表或視圖被刪除時與它關(guān)聯(lián)的觸發(fā)器也一同被刪除。一個表或視圖可以定義多個After觸發(fā)器,一個表或視圖只可以定義一個Instead觸發(fā)器。

13、DML觸發(fā)器DML觸發(fā)器與表和視圖是不能分開的,觸發(fā)器定義在 創(chuàng)建DML觸發(fā)器的語法格式為: CREATE TRIGGER 觸發(fā)器名 ON 表名或視圖名 FOR|AFTER|INSTEAD OF DELETE,INSERT,UPDATE AS SQL語句n 注:不能在視圖或臨時表上建立觸發(fā)器,但是在觸發(fā)器定義中可以引用視圖或臨時表。當(dāng)觸發(fā)器引用視圖或臨時表時,產(chǎn)生兩個特殊的表:deleted表和inserted表。這兩個表的結(jié)構(gòu)總與激活觸發(fā)器的表的結(jié)構(gòu)相同,觸發(fā)器執(zhí)行完成后,與該觸發(fā)器相關(guān)的這兩個臨時表也會被自動刪除。用戶可以用SELECT語句查詢臨時表的內(nèi)容,但不能對它們進(jìn)行修改。可以用于觸

14、發(fā)器的條件測試。 創(chuàng)建DML觸發(fā)器的語法格式為: 例:對stju庫中s表的DELETE操作定義觸發(fā)器。 USE stju GO IF EXISTS( SELECT name FROM sysobjects WHERE name=reader_d AND type=TR) DROP TRIGGER reader_d GO CREATE TRIGGER reader_d ON s FOR DELETE AS PRINT 數(shù)據(jù)被刪除! GO 例:對stju庫中s表的DELETE操作定義觸發(fā)INSERT觸發(fā)器和DELETE觸發(fā)器 當(dāng)向表中插入數(shù)據(jù)時,所有數(shù)據(jù)約束都通過之后,INSERT觸發(fā)器就會執(zhí)行。

15、新的記錄不但加到觸發(fā)器表中,而且還會有副本加入inserted表中。同樣,DELETE觸發(fā)器會將刪除的內(nèi)容保存在deleted表中。INSERTED表與DELETED表一樣,它們的記錄是可讀的,可以進(jìn)行比較,以便確認(rèn)這些數(shù)據(jù)是否正確。UPDATE觸發(fā)器 利用UPDATE修改一條記錄時,相當(dāng)于刪除一條記錄然后再增加一條新記錄。所以UPDATE操作使用inserted和deleted兩個表。當(dāng)使用UPDATE操作時,觸發(fā)器表中原來的記錄被移到deleted表中,修改過的記錄插入到inserted表中,觸發(fā)器可以檢查這兩個表,以便確定應(yīng)執(zhí)行什么樣的操作。 INSERT觸發(fā)器和DELETE觸發(fā)器例1例

16、:創(chuàng)建觸發(fā)器“T_學(xué)生刪除”,從“學(xué)生”表中刪除數(shù)據(jù)時,相應(yīng)地從“成績”表中刪除數(shù)據(jù)。Create trigger T_學(xué)生刪除On 學(xué)生After deleteAsDelete 成績Where 學(xué)生編號=(select 學(xué)生編號 from deleted)例1例:創(chuàng)建觸發(fā)器“T_學(xué)生刪除”,從“學(xué)生”表中刪除數(shù)據(jù)時例2例:創(chuàng)建觸發(fā)器“T_教師添加”,向“輔導(dǎo)員”表中添加數(shù)據(jù)時,相應(yīng)地向“教師”表中添加數(shù)據(jù)。Create trigger T_教師添加On 輔導(dǎo)員After insertAsInsert 教師(編號,姓名,出生年月)Select 編號,姓名,出生年月 from inserted例

17、2例:創(chuàng)建觸發(fā)器“T_教師添加”,向“輔導(dǎo)員”表中添加數(shù)據(jù)例3例:創(chuàng)建觸發(fā)器“T_教師修改”,向“輔導(dǎo)員”表中修改“姓名”列時,相應(yīng)地修改“教師”表中的對應(yīng)數(shù)據(jù)。Create trigger T_教師修改On 輔導(dǎo)員After updateAsIf update(姓名)Begin Update 教師Set 姓名=(select 姓名 from inserted)Where 編號 = (select 編號 from deleted)End 例3例:創(chuàng)建觸發(fā)器“T_教師修改”,向“輔導(dǎo)員”表中修改“姓 局部變量 局部變量是用戶自定義的變量。使用范圍是定義它的批、存儲過程或觸發(fā)器。局部變量前面通常加

18、上標(biāo)記。DECLARE 定義局部變量,并指明此變量的數(shù)據(jù)類型SET或SELECT命令對其賦值。局部變量的數(shù)據(jù)類型可以是用戶自定義的數(shù)據(jù)類型,也可以是系統(tǒng)數(shù)據(jù)類型,但不能將其定義為TEXT或IMAGE數(shù)據(jù)類型。定義局部變量的語法如下: DECLARE local_variable data_type , local_variable data_type DECLARE命令可以定義多個局部變量,之間用逗號分隔。 局部變量與全局變量 局部變量局部變量與全局變量 用SELECT為局部變量賦值的語法如下: SELECT variable_name=expression select statement

19、,variable_name=expression select statement FROM list of tables WHERE expression GROUP BY. HAVING. ORDER BY說明:(1)SELECT命令可以將一個表達(dá)式的值賦給一個局部變量,也可以將一個SELECT查詢的結(jié)果賦給一個局部變量。(2)SELECT命令通常返回一個值給局部變量。當(dāng)返回多個值,則變量的值為最后一個返回值。 用SELECT為局部變量賦值的語法如下: 【例4】 多個返回值的賦值。 DECLARE varl varchar(8) SELECT varl=學(xué)生姓名 SELECT varl

20、= sname FROM s Select varl AS 學(xué)生姓名 執(zhí)行結(jié)果為:學(xué)生姓名 - 返回最后一名學(xué)生的姓名(注意順序) 【例4】 多個返回值的賦值。 【例5】 DECLARE var1 varchar(8) -聲明局部變量SELECT var1=學(xué)生姓名 -為局部變量賦初值Print var1 -顯示局部變量結(jié)果SELECT var1=snameFROM sWHERE sno=200215121SELECT var1 AS 學(xué)生姓名 【例5】 用SET為局部變量賦值 用SET為局部變量賦值的常用語法格式為: SET local_variable= expression 用SET為局

21、部變量賦值【例6】使用SET命令賦值的變量。 USE stju GO DECLARE no varchar(10) SET no=200215122 SELECT sno,sname FROM s WHERE sno= no GO 執(zhí)行結(jié)果為: sno sname - - 200215122 李亞茜【例6】使用SET命令賦值的變量。全局變量 全局變量是一組特殊的函數(shù),他們的名稱以開頭,而且不需要任何參數(shù),在調(diào)用時也無需在函數(shù)名后面加上一對(),這些函數(shù)又稱為“無參函數(shù)”全局變量 全局變量是一組特殊的函數(shù),他們的 使用全局變量時請注意以下規(guī)則:1)全局變量是由SQL Server系統(tǒng)提供并賦值的

22、,是在服務(wù)器級定義的變量。用戶不能建立全局變量,也不能用SET語句修改全局變量的值。但可以將全局變量的值賦給局部變量,以便保存和處理。2)用戶只能使用系統(tǒng)預(yù)定義的全局變量。3)引用全局變量時,前面一定加上標(biāo)記。4)用戶不能定義與系統(tǒng)全局變量同名的局部變量,否則將產(chǎn)生不可預(yù)測的結(jié)果。 使用全局變量時請注意以下規(guī)則:例如:ERROR 保存最近執(zhí)行操作的錯誤狀態(tài),即返回最后一次執(zhí)行SQL語句的錯誤代碼;MAX_CONNECTIONS返回SQL Server上允許用戶同時連接的最大數(shù);CONNECTIONS返回SQL Server最近一次啟動后連接或嘗試連接的次數(shù)。ROWCOUNT,是返回最近一次數(shù)據(jù)

23、庫操作所涉及到的行數(shù)。例如:ERROR 保存最近執(zhí)行操作的錯誤狀態(tài),即返回最后 【例7】使用全局變量ROWCOUNT,查詢命令 影響的行數(shù)。 UPDATE Readers SET 已借數(shù)量=2 SELECT ROWCOUNT AS 行數(shù) GO 執(zhí)行結(jié)果為 行數(shù) 5 【例7】使用全局變量ROWCOUNT,查詢命令例8例:在“成績”上創(chuàng)建觸發(fā)器,檢查插入的成績是否在0到100之間。Create trigger check_成績On 成績For insert, updateAsDeclare score intSelect score = 成績 from insertedIf score100Beg

24、in Print 成績必須在0到100之間! RollbackEnd例8例:在“成績”上創(chuàng)建觸發(fā)器,檢查插入的成績是否在0到10例9在“學(xué)生”表中創(chuàng)建觸發(fā)器,當(dāng)有人試圖修改學(xué)生表中的數(shù)據(jù)時,利用下述觸發(fā)器可以跳過修改數(shù)據(jù)的SQL語句(防止數(shù)據(jù)被修改),并向客戶端顯示提示信息。Create trigger T_學(xué)生_updateOn 學(xué)生Instead of updateAsBegin raiserror(對不起,學(xué)生表的數(shù)據(jù)不允許修改,16,10)End (考慮:如何用after觸發(fā)器改寫?)例9在“學(xué)生”表中創(chuàng)建觸發(fā)器,當(dāng)有人試圖修改學(xué)生表中的數(shù)據(jù)時例10Create trigger T_學(xué)

25、生_update2After updateAsBegin print 對不起,學(xué)生表的數(shù)據(jù)不允許修改 RollbackEnd 例10Create trigger T_學(xué)生_update2Readers(讀者編號,讀者類型,姓名,單位,已借圖書數(shù)量)Books(圖書編號,數(shù)量,出版社名)borrowinf(讀者編號,圖書編號,借書日期,還書日期)當(dāng)在表borrowinf中插入借閱信息記錄時,得到該書的應(yīng)還日期。 CREATE TRIGGER T_return_date ON borrowinf for INSERT AS DECLARE type varchar(8) SELECT type=讀

26、者類型 FROM readers WHERE 編號=(select 讀者編號 from INSERTED ) update borrowinf set 還書日期=getdate()+ case when type=3 then 45 when type=2 then 60 when type=1 then 90 end where 讀者編號=(select 讀者編號 from INSERTED )例11 觸發(fā)器創(chuàng)建之后,用戶執(zhí)行一條命令: insert into borrowinf(讀者編號,圖書編號) values(2004060002,F33.33) Readers(讀者編號,讀者類型,姓

27、名,單位,已借圖書數(shù)量 CREATE TRIGGER s_d ON sc FOR DELETE AS DECLARE data_yj int SELECT data_yj= grade FROM deleted IF data_yj0 begin PRINT 成績?yōu)?RTRIM(data_yj) rollback end ELSE PRINT 該學(xué)生選課記錄已被刪除! 觸發(fā)器創(chuàng)建之后,用戶執(zhí)行一條命令: DELETE sc WHERE sno=200215125 例12 觸發(fā)器創(chuàng)建之后,用戶執(zhí)行一條命令:例122022/10/12 長春理工大學(xué)計算機(jī)科學(xué)技術(shù)學(xué)院下面那條命令能使數(shù)據(jù)庫數(shù)據(jù)發(fā)生變

28、化( ) USE CollegeMISGOCREATE TRIGGER Update_Teacher ON Teacher FOR UPDATE AS IF UPDATE(TeaID) BEGIN PRINT 不能修改教師的身份證號 ROLLBACK TRANSACTION END GO 2022/10/10 長春理工大學(xué)計算機(jī)科學(xué)技術(shù)學(xué)院下面那下面程序執(zhí)行結(jié)果( )USE CollegeMISGOCREATE TRIGGER Delete_Teacher ON Teacher FOR DELETE AS ROLLBACK TRANSACTIONGODELETE FROM Teacher WH

29、ERE age60GO SELECT * FROM Teacher WHERE age602022/10/12 長春理工大學(xué)計算機(jī)科學(xué)技術(shù)學(xué)院下面程序執(zhí)行結(jié)果( )2022/10/10 長春理工例1:在 market 數(shù)據(jù)庫中建立一個名為del_goods的 DELETE 觸發(fā)器,存儲在goods表中。當(dāng)用戶刪除goods表中的某些貨品時,這些貨品在orders表中的定單全部刪除,以實現(xiàn)goods表和orders表的級聯(lián)刪除。第一步:創(chuàng)建觸發(fā)器USE marketGOCREATE TRIGGER del_goods ON goods AFTER DELETE AS DELETE orders

30、WHERE 貨品名稱 IN (SELECT 貨品名稱 FROM DELETED)GO實驗題目:例1:在 market 數(shù)據(jù)庫中建立一個名為del_good第二步:檢驗觸發(fā)器的作用DELETE goods WHERE 貨品名稱=penIF NOT EXISTS(SELECT * FROM Orders WHERE 貨品名稱 =pen)PRINT 相關(guān)記錄已從orders表中刪除掉!第二步:檢驗觸發(fā)器的作用例2:在market 數(shù)據(jù)庫中創(chuàng)建一個名為ins_orders 的 INSERT 觸發(fā)器,存儲在orders表中,當(dāng)向表orders中插入一條記錄時,檢查該定單中的貨品是否正在整理中(查看對應(yīng)貨

31、品在goods表中的狀態(tài)是否為1),如果是在整理中,則不能下定單(該記錄不能插入goods表中)。第一步:創(chuàng)建觸發(fā)器USE marketGOCREATE TRIGGER ins_orders ON orders AFTER INSERT AS DECLARE x char(20), y bit 例2:在market 數(shù)據(jù)庫中創(chuàng)建一個名為ins_orderSELECT x=貨品名稱 FROM insertedSELECT y=狀態(tài) FROM goods WHERE 貨品名稱= xIF y=1 BEGIN PRINT (本貨品正在整理中,現(xiàn)在不能下定單) ROLLBACK TRANSACTION ENDGO SELECT x=貨品名稱 FROM inserted第二步:檢驗觸發(fā)器的作用INSERT orders (貨品名稱,客戶編號,數(shù)量) VALUES (desk,2,5)SELECT * FROM orders WHERE 貨品名稱=desk第二步:檢驗觸發(fā)器的作用例

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論