【正文】
FROM 倉庫 WHERE 倉庫編號 NOT IN (SELECT 倉庫編號 FROM 庫存情況)) BEGIN24 SELECT TOP 1 @o=倉庫編號 FROM 倉庫 WHERE 倉庫編號 NOT IN (SELECT 倉庫編號 FROM 庫存情況) INSERT 庫存情況 VALUES(@o, @spno, @number) ENDELSE BEGIN SELECT TOP 1 @o=倉庫編號 FROM 庫存情況 GROUP BY 倉庫編號 ORDER BY SUM(數(shù)量) IF exists (SELECT * FROM 庫存情況 WHERE 倉庫編號 =@o and 商品編號=@spno) UPDATE 庫存情況 SET 數(shù)量= 數(shù)量+@number WHERE 倉庫編號=@o and 商品編號=@spno ELSE INSERT 庫存情況 VALUES(@o, @spno, @number) END6.為 dept 表創(chuàng)建一個實現(xiàn)級聯(lián)刪除的觸發(fā)器,當(dāng)執(zhí)行刪除時,激活該觸發(fā)器同時刪除 gongcheng 表中相應(yīng)記錄(leader 列) 。答:CREATE TRIGGER d_tr ON deptFOR deleteAS delete from gongcheng where leader=(SELECT leader FROM deleted)7.在教學(xué)庫中建一個學(xué)生黨費表,屬性(學(xué)號,姓名,黨費) ,學(xué)號是主鍵,也是外鍵(參考學(xué)生表的學(xué)號) ;創(chuàng)建一個觸發(fā)器,保證只能在每年的 6 月和 12 月交黨費,如果在其它時間錄入則顯示提示信息。答:CREATE TABLE 學(xué)生黨費表( 學(xué)號 CHAR(7) primary key foreign key references 學(xué)生表(學(xué)號), 姓名 char(6), 黨費 int)CREATE TRIGGER trg_學(xué)生黨費表on 學(xué)生黨費表 for insertASif not(datepart(mm,getdate())=39。0639。 or datepart(mm,getdate())=39。1239。)BEGINprint39。對不起,只能在每年的 6 月和 12 月交黨費39。rollbackEND258.在倉庫庫存情況表上創(chuàng)建一個觸發(fā)器,用于實現(xiàn)復(fù)雜的約束:在對庫存進(jìn)行插入和修改時,按倉庫的容量進(jìn)行約束。例如,在修改 001 號倉庫的庫存數(shù)量時,觸發(fā)了觸發(fā)器,如圖 1。圖 1 習(xí)題 7 的觸發(fā)器功能答:CREATE TRIGGER kucun_tr1 ON 庫存情況FOR INSERT,UPDATEASDECLARE @S INT,@S1 INT,@NO CHAR(3)SELECT @S=SUM(庫存情況 .數(shù)量) FROM 庫存情況,inserted WHERE 庫存情況 .倉庫編號=inserted. 倉庫編號SELECT @S1=容量,@NO=inserted. 倉庫編號 FROM 倉庫,inserted WHERE 倉庫. 倉庫編號= IF @S@S1 BEGIN PRINT @NO+39。號倉庫的容量為 39。+CAST(@s1 as char(3))+39。,已滿。39。 ROLLBACK END第 11 章 習(xí)題1.什么是事務(wù)?如果要提交或取消一個事務(wù),使用什么語句?答:事務(wù)處理是數(shù)據(jù)庫的主要工作,事務(wù)由一系列的數(shù)據(jù)操作組成,是數(shù)據(jù)庫應(yīng)用程序的基本邏輯單元,用來保證數(shù)據(jù)的一致性。 提交或取消一個事務(wù):COMMIT TRANSACTION 或 ROLLBACK TRANSACTION 語句。262.事務(wù)分為哪幾類?答:根據(jù)系統(tǒng)的設(shè)置,SQL Server 2022 將事務(wù)分為兩種類型:系統(tǒng)提供的事務(wù)和用戶定義的事務(wù)。根據(jù)運行模式的不同,SQL Server 2022 將事務(wù)分為 4 種類型:顯示事務(wù)、隱式事務(wù)、自動提交事務(wù)和批處理級事務(wù)。3.簡述事務(wù)回滾機(jī)制。答:(1)如果不指定回滾的事務(wù)名稱或保存點,則 ROLLBACK TRANSACTION 命令會將事務(wù)回滾到事務(wù)的起點。 (2)在嵌套事務(wù)時,該語句將所有內(nèi)層事務(wù)回滾到最遠(yuǎn)的 BEGIN TRANSACTION語句,transaction_name 也只能是來自最遠(yuǎn)的 BEGIN TRANSACTION 語句的名稱。 (3)在執(zhí)行 COMMIT TRANSACTION 語句后不能回滾事務(wù)。 (4)如果在觸發(fā)器中發(fā)出 ROLLBACK TRANSACITON 命令,將回滾對當(dāng)前事務(wù)中所做的所有數(shù)據(jù)修改,包括觸發(fā)器所做的修改。 (5)事務(wù)在執(zhí)行過程中出現(xiàn)任何錯誤,SQL Server 都將自動回滾事務(wù)。4.簡述鎖機(jī)制,鎖分為哪幾類。答:鎖是防止其他事務(wù)訪問指定的資源、實現(xiàn)并發(fā)控制的一種手段,是多個用戶能夠同時操縱同一個數(shù)據(jù)庫中的數(shù)據(jù)而不發(fā)生數(shù)據(jù)不一致現(xiàn)象的重要保障。鎖分為(1) 共享鎖(Shared Lock)(2) 排它鎖(Exclusive Lock)(3) 更新鎖(Update Lock)(4) 意向鎖(Intent Lock)(5) 模式鎖(Schema Lock)(6) 大容量更新鎖(Bulk Update Lock)5.分析各類鎖之間的兼容性。在一個事務(wù)已經(jīng)對某個對象鎖定的情況下,另一個事務(wù)請求對同一個對象的鎖定,此時就會出現(xiàn)鎖定兼容性問題。當(dāng)兩種鎖定方式兼容時,可以同意對該對象的第二個鎖定請求。如果請求的鎖定方式與已掛起的鎖定方式不兼容,那么就不能同意第二個鎖定請求。相反,請求要等到第一個事務(wù)釋放其鎖定,并且釋放所有其他現(xiàn)有的不兼容鎖定為止。詳細(xì)內(nèi)容見書表 111 。6.簡述死鎖及其解決辦法。答:產(chǎn)生死鎖的情況一般包括以下兩種: 第一種情況,當(dāng)兩個事務(wù)分別鎖定了兩個單獨的對象,這時每一個事務(wù)都要求在另外一個事務(wù)鎖定的對象上獲得一個鎖,因此每一個事務(wù)都必須等待另外一個事務(wù)釋放占有的鎖,這時,就發(fā)生了死鎖。這種死鎖是最典型的死鎖形式。 第二種情況,當(dāng)在一個數(shù)據(jù)庫中時,有若干個長時間運行的事務(wù)執(zhí)行并行的操作,當(dāng)查詢分析器處理一種非常復(fù)雜的查詢例如連接查詢時,那么由于不能控制處理的順序,有可能發(fā)生死鎖現(xiàn)象。 在數(shù)據(jù)庫中解決死鎖常用的方法有:(1)要求每個事務(wù)一次就將要使用的數(shù)據(jù)全部加鎖,否則就不能繼續(xù)執(zhí)行。(2)允許死鎖發(fā)生,系統(tǒng)來用某些方式診斷當(dāng)前系統(tǒng)中是否有死鎖發(fā)生。7.創(chuàng)建一個事務(wù),將所有女生的考試成績都加 5 分,并提交。27答:BEGIN TRANSACTION USE 教學(xué)庫UPDATE 選課表SET 成績=成績 +5WHERE 學(xué)號 in (SELECT 學(xué)號 FROM 學(xué)生表 WHERE 性別=’女’)COMMIT TRANSACTION8.創(chuàng)建一個事務(wù),向商品表中添加一條記錄,設(shè)置保存點;再將商品編號為“ds001”的單價改為“2022” 。答:BEGIN TRANSACTION USE 倉庫庫存INSERT INTO 商品(商品編號,商品名稱,單價,生產(chǎn)商)VALUES(39。bx15939。,39。 冰箱39。, 2500,39。安徽美菱39。)SAVE TRAN savepointUPDATE 商品 SET 單價=2022 WHERE 商品編號= 39。 ds00139。COMMIT第 12 章 習(xí)題1.簡答題(1)簡述服務(wù)器登錄賬戶和數(shù)據(jù)庫用戶賬號的創(chuàng)建方法。答:略。(2)SQL Server 兩種身份驗證的優(yōu)點分別是什么?答:Windows 驗證模式有以下主要優(yōu)點: 數(shù)據(jù)庫管理員的工作可以集中在管理數(shù)據(jù)庫上,而不是管理用戶賬戶。對用戶賬戶的管理可以交給 Windows 去完成。 Windows 有著更強(qiáng)的用戶賬戶管理工具??梢栽O(shè)置賬戶鎖定、密碼期限等。 Windows 的組策略支持多個用戶同時被授權(quán)訪問 SQL Server。SQL Server 是從 RPC 協(xié)議連接中自動登錄 Windows 用戶賬戶信息的。混合驗證模式具有如下優(yōu)點:創(chuàng)建了 Windows 之上的另外一個安全層次。支持更大范圍的用戶,例如非 Windows 客戶、Novell 網(wǎng)絡(luò)等。一個應(yīng)用程序可利用單個的 SQL Server 登錄或口令。(3)簡述角色的概念及其分類。答:角色是一種 SQL Server 安全賬戶,是 SQL Server 內(nèi)部的管理單元,是管理權(quán)限時可以視為單個單元的其他安全賬戶的集合。角色被分成 3 類:固定服務(wù)器角色、固定數(shù)據(jù)庫角色和用戶自定義的數(shù)據(jù)庫角色。28(4)簡述什么是固定服務(wù)器角色?什么是固定數(shù)據(jù)庫角色。答:固定服務(wù)器角色是在服務(wù)器級別定義的,所以存在于數(shù)據(jù)庫外面,是屬于數(shù)據(jù)庫服務(wù)器的。在 SQL Server 安裝時就創(chuàng)建了在服務(wù)器級別上應(yīng)用的大量預(yù)定義的角色,每個角色對應(yīng)著相應(yīng)的管理權(quán)限。在 SQL Server 2022 安裝時,數(shù)據(jù)庫級別上也有一些預(yù)定義的角色,在創(chuàng)建每個數(shù)據(jù)庫時都會添加這些角色到新創(chuàng)建的數(shù)據(jù)庫中,每個角色對應(yīng)著相應(yīng)的權(quán)限。(5)試述用戶自定義數(shù)據(jù)庫角色及應(yīng)用程序角色的建立方法。答:略。(6)簡述進(jìn)行權(quán)限設(shè)置時,授予、拒絕或撤銷三者的關(guān)系。答:授予:用戶被授予特定數(shù)據(jù)庫對象的某種操作權(quán)限,該用戶就可以對數(shù)據(jù)在此權(quán)限范圍內(nèi)進(jìn)行操作;撤銷:用戶不再具有特定數(shù)據(jù)庫對象的某種操作權(quán)限,但用戶可以通過其組或角色成員身份繼承此種權(quán)限;拒絕:禁止用戶對特定數(shù)據(jù)庫對象的某種操作權(quán)限,防止用戶通過其組或角色成員身份繼承此種權(quán)限。2.操作題答:略。第 13 章 習(xí)題1.簡述數(shù)據(jù)庫備份和還原的基本概念?答:數(shù)據(jù)庫備份就是在某種介質(zhì)上(磁盤、磁帶等) 創(chuàng)建完整數(shù)據(jù)庫 (或者其中一部分)的副本,并將所有的數(shù)據(jù)項都復(fù)制到備份集,以便在數(shù)據(jù)庫遭到破壞時能夠恢復(fù)數(shù)據(jù)庫。 還原數(shù)據(jù)庫是一個裝載數(shù)據(jù)庫的備份,然后應(yīng)用事務(wù)日志重建的過程。2.?dāng)?shù)據(jù)庫備份有哪幾種類型?答:在 SQL Server 系統(tǒng)中,有 4 種備份類型,分別如下所示:①完整數(shù)據(jù)庫備份。②差異數(shù)據(jù)庫備份。③事務(wù)日志備份。④數(shù)據(jù)庫文件或文件組備份。3.簡述數(shù)據(jù)庫的恢復(fù)模式。答:SQL Server 2022 系統(tǒng)提供了 3 種數(shù)據(jù)庫的恢復(fù)模式:①完整恢復(fù)模式。②簡單恢復(fù)模式。③大容量日志恢復(fù)模式。4.在 SQL Server Management Studio 中使用界面進(jìn)行備份和還原數(shù)據(jù)庫的操作過程。答:略。5.使用 TSQL 語句分別實現(xiàn)數(shù)據(jù)庫的備份和還原操作。29答:略。6.了解數(shù)據(jù)庫的分離和附加的作用及操作方法。答:SQL Server 2022 允許分離數(shù)據(jù)庫的數(shù)據(jù)和事務(wù)日志文件,然后將其重新附加到同一臺或另一臺服務(wù)器上。分離數(shù)據(jù)庫將從 SQL Server 刪除數(shù)據(jù)庫,但是保證在組成該數(shù)據(jù)庫的數(shù)據(jù)和事務(wù)日志文件中的數(shù)據(jù)庫完好無損。然后這些數(shù)據(jù)和事務(wù)日志文件可以用來將數(shù)據(jù)庫附加到任何 SQL Server 實例上,這使數(shù)據(jù)庫的使用狀態(tài)與它分離時的狀態(tài)完全相同。第 14 章 習(xí)題1.簡述C語言的特點。答:(1)語法簡潔 (2)完全面向?qū)ο?(3)與Web緊密結(jié)合 (4)目標(biāo)軟件的安全性 (5)版本管理技術(shù) (6)靈活性與兼容性2.。答: 對象模型有五個主要的組件,分別是 Connection 對象、Command 對象、DataReader 對象、DataSet 對象以及 DataAdapter 對象。Connection對象表示與數(shù)據(jù)源之間的連接,用它來建立或斷開與數(shù)據(jù)庫的連接。Command對象主要可以用來對數(shù)據(jù)庫發(fā)出一些指令,例如可以對數(shù)據(jù)庫下達(dá)查詢、插入、修改、刪除等數(shù)據(jù)指令,以及呼叫存在數(shù)據(jù)庫中的預(yù)存程序等。DataReader用于以最快的速度檢索并檢查查詢所返回的行。DataSet對象可視為暫存區(qū)。可以把數(shù)據(jù)庫中查到的信息保存起來,甚至可以顯示整個數(shù)據(jù)庫。3.。答:利用 Connection、Command 和 DataReader 對象訪問數(shù)據(jù)庫,只能從數(shù)據(jù)庫讀取數(shù)據(jù),不能添加、修改和刪除記錄。如果只想進(jìn)行查詢,這種方式效率更高一些。利用 Connection、Command、DataAdapter 和 DataSet 對象,這種方式比較靈活,不僅可以對數(shù)據(jù)庫進(jìn)行查詢操作,還可以進(jìn)行增加、刪除和修改等操作。4.使用C語言,創(chuàng)建一個“倉庫庫存管理系統(tǒng)”的數(shù)據(jù)庫應(yīng)用系統(tǒng)。包括進(jìn)貨錄入、產(chǎn)品庫存查詢、產(chǎn)品庫存維護(hù)、出貨等功能。數(shù)據(jù)庫的設(shè)計過程和程序開發(fā)全部由讀者自行完成。答: