當前位置:首頁 » 編程語言 » sql觸發器實驗總結
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql觸發器實驗總結

發布時間: 2022-05-16 19:40:37

sql實驗:觸發器

-------1、

CREATE TRIGGER tr_insert
ON 學生表
FOR INSERT
AS
DECLARE @Class_ID int,
@Stu_id int

select top 1 @Class_ID=課號 from (select 課號,count(*) as total from 選課表 group by 課號) t1 order by t1.total desc
select @Stu_id=學號 from inserted
insert into 選課表 values(@Stu_id, @Class_ID, 0)
GO

--------2、

CREATE TRIGGER tr_delete
ON 學生表
FOR DELETE
AS
DECLARE @Stu_id int

select @Stu_id=學號 from deleted

if exists (select 1 from 選課表 where 學號=@Stu_id)
begin
RAISERROR ('拒絕刪除學號為%d的記錄,因該生有選課記錄',@Stu_id)
ROLLBACK TRANSACTION
end
/*要求在刪除學生信息同時,將相關表中的信息全部刪除(因不知道你的表,你自己添加根據@Stu_id(學號)來在下面添加額外對應表的刪除吧*/
GO

② sql 觸發器的作用

用於強制服從復雜的業務規則或要求。例如:您可以根據客戶當前的帳戶狀態,控制是否允許插入新訂單。
觸發器也可用於強制引用完整性,以便在多個表中添加、更新或刪除行時,保留在這些表之間所定義的關系。然而,強制引用完整性的最好方法是在相關表中定義主鍵和外鍵約束。如果使用資料庫關系圖,則可以在表之間創建關系以自動創建外鍵約束。
DELIMITER | CREATE TRIGGER `<databaseName>`.`<triggerName>` < [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] > ON <tableName> FOR EACH ROW BEGIN --do something END |
觸發器可通過資料庫中的相關表實現級聯更改,不過,通過級聯引用完整性約束可以更有效地執行這些更改。觸發器可以強制比用CHECK約束定義的約束更為復雜的約束。與 CHECK 約束不同,觸發器可以引用其它表中的列。例如,觸發器可以使用另一個表中的 SELECT 比較插入或更新的數據,以及執行其它操作,如修改數據或顯示用戶定義錯誤信息。觸發器也可以評估數據修改前後的表狀態,並根據其差異採取對策。一個表中的多個同類觸發器(INSERT、UPDATE 或 DELETE)允許採取多個不同的對策以響應同一個修改語句。
約束和觸發器在特殊情況下各有優勢。觸發器的主要好處在於它們可以包含使用 Transact-SQL 代碼的復雜處理邏輯。因此,觸發器可以支持約束的所有功能;但它在所給出的功能上並不總是最好的方法。實體完整性總應在最低級別上通過索引進行強制,這些索引或是 PRIMARY KEY 和 UNIQUE 約束的一部分,或是在約束之外獨立創建的。假設功能可以滿足應用程序的功能需求,域完整性應通過 CHECK 約束進行強制,而引用完整性(RI) 則應通過 FOREIGN KEY 約束進行強制。在約束所支持的功能無法滿足應用程序的功能要求時,觸發器就極為有用。
例如:除非 REFERENCES 子句定義了級聯引用操作,否則 FOREIGN KEY 約束只能以與另一列中的值完全匹配的值來驗證列值。
CHECK 約束只能根據邏輯表達式或同一表中的另一列來驗證列值。如果應用程序要求根據另一個表中的列驗證列值,則必須使用觸發器。約束只能通過標準的系統錯誤信息傳遞錯誤信息。如果應用程序要求使用(或能從中獲益)自定義信息和較為復雜的錯誤處理,則必須使用觸發器。
觸發器可通過資料庫中的相關表實現級聯更改;不過,通過級聯引用完整性約束可以更有效地執行這些更改。觸發器可以禁止或回滾違反引用完整性的更改,從而取消所嘗試的數據修改。當更改外鍵且新值與主鍵不匹配時,此類觸發器就可能發生作用。例如,可以在 titleauthor.title_id 上創建一個插入觸發器,使它在新值與 titles.title_id 中的某個值不匹配時回滾一個插入。不過,通常使用 FOREIGN KEY 來達到這個目的。
如果觸發器表上存在約束,則在 INSTEAD OF 觸發器執行後但在 AFTER 觸發器執行前檢查這些約束。如果約束破壞,則回滾 INSTEAD OF 觸發器操作並且不執行 AFTER 觸發器。 觸發器到底可不可以在視圖上創建 在 SQL Server™ 聯機叢書中,是沒有說觸發器不能在視圖上創建的, 並且在語法解釋中表明:在 CREATE TRIGGER 的 ON 之後可以是視圖。 然而,事實似乎並不是如此,很多專家也說觸發器不能在視圖上創建。我也專門作了測試,的確如此,不管是普通視圖還是索引視圖,都無法在上面創建觸發器,真的是這樣嗎? 請點擊詳細,但是無可厚非的是:當在臨時表或系統表上創建觸發器時會遭到拒絕。

③ SQLserver資料庫實訓總結怎麼寫

這個主要要著重寫幾個方面,你一定要多寫,寫的詳細一點。

1,管理系統的資料庫需求【這個算是概況】

2,資料庫對象模型設計 【設計核心部分】

3,資料庫的創建以及表間關系,存儲過程,視圖,觸發器的設計和定義。【標準定義部分】

4,資料庫的優化設計,【這個你要是沒有經驗,就多測試,多寫測試結果】
【著重在測試上多寫點啊,比如,20萬數據和100萬數據的時候,你是如何優化查詢的】
少說這里能寫個幾千字。

5,數據訪問組件的代碼結構,既然是管理系統,肯定要涉及數據訪問。你把這個多寫一點,比如不同組件之間的數據訪問的差異,優勢,弊端,你是如何改進的之類的。

7,BUG調試日誌,開發這么個系統,肯定是中途經歷了不少的錯誤和修改,你把這個過程寫一點。

8,記錄下你對於這個系統從設計到開發的經驗,總結。

這么下來,怎麼著也得1萬字吧,要是再把參考的資料加上,恐怕能列印一小本了。

④ 急求SQL資料庫的實訓總結,以及在實訓中碰到的問題和體會

都差不多吧!我也寫過一次,給你吧,希望能夠幫到你

這個星期是我們SQL Server 資料庫管理課的實訓,經過一個星期的實訓,讓我領會到了許多平時課堂上所沒有接受的課外知識,很讓人受益匪淺,懂得如何去運用,而進行的一次分析設計綜合的訓練。而本次實訓的目的是讓我們掌握資料庫系統的原理、技術。將理論與實際相結合,應用現有的資料庫管理系統軟體,規范、科學地完成一個設計與實現。

這次我們實訓的內容是從資料庫、數據表的創建和修改開始的,表是建立關系資料庫的基本結構,用來存儲數據具有已定義的屬性,在表的操作過程中,有查看錶信息、查看錶屬性、修改表中的數據、刪除表中的數據及修改表和刪除表的操作。從實訓中讓我更明白一些知識,表是數據最重要的一個數據對象,表的創建好壞直接關繫到數資料庫的成敗,表的內容是越具體越好,但是也不能太繁瑣,以後在實際應用中多使用表,對表的規劃和理解就會越深刻。我們實訓的另一個內容是資料庫的約束、視圖、查詢。從中我們了解到查詢語句的基本結構,和簡單SELECT語句的使用,多表連接查詢。而在視圖的操作中,也了解到了視圖是常見的資料庫對象,是提供查看和存取數據的另一種途徑,對查詢執行的大部分操作,使用視圖一樣可以完成。使用視圖不僅可以簡化數據操作,還可以提高資料庫的安全性,不僅可以檢索數據,也可以通過視圖向基表中添加、修改和刪除數據。存儲過程、觸發器也是我們實訓的內容之一, 在操作中有建立存儲過程,執行存儲過程,及查看和修改存儲過程,這些都是非常基礎的東西,但對用戶卻是非常重要的呢,只有熟悉了T_SQL語言,才能更好的掌握更多的東西。我們還學習了,SQL管理、數據的導入、導出、備份和還原。有SQL Server 安全訪問控制;登錄賬戶的管理;資料庫角色的管理;用戶許可權管理。維護資料庫的安全是確保資料庫正常運行的重要工作。數據的備份是對SQL Server數據事務日誌進行拷貝,資料庫備份記錄了在進行備份操作的資料庫中所有數據的狀態。而數據的備份還分為資料庫完整備份、差異備份、事務日誌備份、文件及文件組備份。做數據備份就是為了以後的資料庫恢復用。在實訓內容上我們還做了倉庫管理資料庫,其中的要求包含了許多資料庫的對象,綜合了我們所學的許多知識,讓我們更努力的把所學到的東西運用上去。

實訓課是在學習與探索中度過的,短暫的一星期實訓是結束了,但其中讓我們學到了許多知識,出現許多未知的為什麼,如倉庫管理資料庫的初步設置、數據備份與還原的步驟,如何建立視圖、觸發器等一系列的問題,正是在老師和同學的共同努力之下,我們才一步步把問題解決了,最終完成了不可能完成的任務。

⑤ SQL中觸發器有什麼作用

觸發器可以查詢其它表,而且可以包含復雜的 SQL 語句。它們主要用於強制復雜的業務規則或要求。例如,可以控制是否允許基於顧客的當前帳戶狀態插入定單。 觸發器還有助於強制引用完整性,以便在添加、更新或刪除表中的行時保留表之間已定義的關系。然而,強制引用完整性的最好方法是在相關表中定義主鍵和外鍵約束。如果使用資料庫關系圖,則可以在表之間創建關系以自動創建外鍵約束。 觸發器的優點如下: 觸發器是自動的:它們在對表的數據作了任何修改(比如手工輸入或者應用程序採取的操作)之後立即被激活。觸發器可以通過資料庫中的相關表進行層疊更改。例如,可以在 titles 表的 title_id 列上寫入一個刪除觸發器,以使其它表中的各匹配行採取刪除操作。該觸發器用 title_id 列作為唯一鍵,在 titleauthor、sales 及 roysched 表中對各匹配行進行定位。觸發器可以強制限制,這些限制比用 CHECK 約束所定義的更復雜。與 CHECK 約束不同的是,觸發器可以引用其它表中的列。例如,觸發器可以回滾試圖對價格低於 10 美元的書(存儲在 titles 表中)應用折扣(存儲在 discounts 表中)的更新。

⑥ SQL觸發器有什麼用處啊

觸發器是一種特殊類型的存儲過程,它在指定的表中的數據發生變化時自動生效。喚醒調用觸發器以響應 INSERT、UPDATE 或 DELETE 語句。觸發器可以查詢其它表,並可以包含復雜的 Transact-SQL 語句。將觸發器和觸發它的語句作為可在觸發器內回滾的單個事務對待。如果檢測到嚴重錯誤(例如,磁碟空間不足),則整個事務即自動回滾。 觸發器可通過資料庫中的相關表實現級聯更改;不過,通過級聯引用完整性約束可以更有效地執行這些更改。 觸發器可以強制比用 CHECK 約束定義的約束更為復雜的約束。 與CHECK 約束不同,觸發器可以引用其它表中的列。例如,觸發器可以使用另一個表中的 SELECT 比較插入或更新的數據,以及執行其它操作,如修改數據或顯示用戶定義錯誤信息。 觸發器也可以評估數據修改前後的表狀態,並根據其差異採取對策。 一個表中的多個同類觸發器(INSERT、UPDATE 或 DELETE)允許採取多個不同的對策以響應同一個修改語句。 比較觸發器與約束 約束和觸發器在特殊情況下各有優勢。觸發器的主要好處在於它們可以包含使用 Transact-SQL 代碼的復雜處理邏輯。因此,觸發器可以支持約束的所有功能;但它在所給出的功能上並不總是最好的方法。 實體完整性總應在最低級別上通過索引進行強制,這些索引或是 PRIMARY KEY 和 UNIQUE 約束的一部分,或是在約束之外獨立創建的。假設功能可以滿足應用程序的功能需求,域完整性應通過 CHECK 約束進行強制,而引用完整性 (RI) 則應通過 FOREIGN KEY 約束進行強制。 在約束所支持的功能無法滿足應用程序的功能要求時,觸發器就極為有用。例如: 除非REFERENCES 子句定義了級聯引用操作,否則 FOREIGN KEY 約束只能以與另一列中的值完全匹配的值來驗證列值。 CHECK 約束只能根據邏輯表達式或同一表中的另一列來驗證列值。如果應用程序要求根據另一個表中的列驗證列值,則必須使用觸發器。 約束只能通過標準的系統錯誤信息傳遞錯誤信息。如果應用程序要求使用(或能從中獲益)自定義信息和較為復雜的錯誤處理,則必須使用觸發器。 觸發器可通過資料庫中的相關表實現級聯更改;不過,通過級聯引用完整性約束可以更有效地執行這些更改。 觸發器可以禁止或回滾違反引用完整性的更改,從而取消所嘗試的數據修改。當更改外鍵且新值與主鍵不匹配時,此類觸發器就可能發生作用。例如,可以在 titleauthor.title_id 上創建一個插入觸發器,使它在新值與 titles.title_id 中的某個值不匹配時回滾一個插入。不過,通常使用 FOREIGN KEY 來達到這個目的。 如果觸發器表上存在約束,則在 INSTEAD OF 觸發器執行後但在 AFTER 觸發器執行前檢查這些約束。

⑦ sql觸發器如何用,有什麼作用。最好列舉三個、、、

觸發器就是一個特殊的存儲過程,但是觸發器沒有輸入參數,顧名思義是由某種特定的條件觸發的。舉個例子,如果你有2個表a,b其中a裡面的id跟b裡面的id綁定,a是學生基本信息表,b是學生選課信息表,假使某個同學被開除,那麼a表裡面該同學的信息就必須刪除,那麼竟然該同學都被開除了,b表裡面的信息自然也都應該一並除去,這個時候就可以建立這樣一個觸發器在a表上,觸發條件為delete,只要發現a表有信息刪除,則自動刪除b表中相應id的信息。這樣可以保證整個系統的健壯性。不會出現bug(學生基本信息都刪除但是選課信息還在的現象)
以下是一個實例:
create trigger t_delete_TranD//觸發器的名字為t_delete_TranD
on TranD//觸發器建立在表TranD上
for delete//表TranD上的delete操作是觸發器執行的觸發條件
as
begin//以下是觸發器執行的內容
update ContainerPick
set Status = '3',
TranNo = null
from ContainerPick a,deleted d
where a.TranNo = d.TranNo and
a.ContainerPackNo = d.DistNo and
a.Status = '4'
if @@error<>0//執行失敗的處理
begin
raiserror 33334 '恢復棧板狀態失敗!'
rollback
return
end
end
go

⑧ sql實驗觸發器

1:設學號為主鍵

createtriggertrMax30
onStudent
forinsert,updateas
ifexists(select班級號,count(學號)fromStudent
groupby班級號havingcount(學號)>30)
begin
print('發現超過30個學生班級的數據,操作失敗')
rollback
end

2:

createtriggertrDataToLog
onsc
forupdate
insertintosc_log(grade,學號)selectgrade,學號frominserted