完整性的要求數(shù)據(jù)庫中數(shù)據(jù)的正確性相容性約束的實現(xiàn).ppt_第1頁
完整性的要求數(shù)據(jù)庫中數(shù)據(jù)的正確性相容性約束的實現(xiàn).ppt_第2頁
完整性的要求數(shù)據(jù)庫中數(shù)據(jù)的正確性相容性約束的實現(xiàn).ppt_第3頁
完整性的要求數(shù)據(jù)庫中數(shù)據(jù)的正確性相容性約束的實現(xiàn).ppt_第4頁
完整性的要求數(shù)據(jù)庫中數(shù)據(jù)的正確性相容性約束的實現(xiàn).ppt_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

完整性的要求 數(shù)據(jù)庫中數(shù)據(jù)的正確性、相容性 約束的實現(xiàn) DBMS支持對約束的聲明 for data 使用觸發(fā)器(觸發(fā)程序) for action (event),SQL中的約束和觸發(fā)程序,約束是基于數(shù)據(jù)變化的 Trigger則是基于對表的操作(動作)的 當指定的表上發(fā)生特定的操作,系統(tǒng)便激活Trigger程序 大部分DBMS產(chǎn)品均支持Trigger 觸發(fā)器類型 Insert / Update / Delete Before / After,舉例: CREATE TRIGGER reminder ON titles FOR INSERT, UPDATE, DELETE AS EXEC masterxp_sendmail MaryM, Dont forget to print a report for the distributors. GO,觸發(fā)器可以強制比用 CHECK 約束定義的約束更為復(fù)雜的約束。 與 CHECK 約束不同,觸發(fā)器可以引用其它表中的列。 觸發(fā)器可通過數(shù)據(jù)庫中的相關(guān)表實現(xiàn)級聯(lián)更改;不過,通過級聯(lián)引用完整性約束可以更有效地執(zhí)行這些更改。 觸發(fā)器也可以評估數(shù)據(jù)修改前后的表狀態(tài),并根據(jù)其差異采取對策。 一個表中的多個同類觸發(fā)器(INSERT、UPDATE 或 DELETE)允許采取多個不同的對策以響應(yīng)同一個修改語句。 激發(fā)一個外部動作,觸發(fā)器的用途,存儲過程是一組為了完成特定功能的SQL語句集,經(jīng)編譯后存儲在數(shù)據(jù)庫中。用戶通過指定存儲過程的名稱并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。,存儲過程(Stored Procedure),存儲過程-示例,Create Procedure update_dept (IN old_dept_num INT, IN new_dept_num INT, IN new_dept_name Char(20), IN new_dept_head_id INT) BEGIN ATOMIC Insert Into Department (dept_id,dept_name, dept_head_id) Values (new_dept_num, new_dept_name, new_dept_head_id);,Update employee Set dept_id = new_dept_num Where dept_id=old_dept_num; Delete From department Where dept_id=old_dept_num; END Execute update_dept 123,212,cs,98001,數(shù)據(jù)訪問接口,交互式SQL 嵌入的SQL CLI和ODBC、JDBC OLE DB,嵌入式SQL,宿主語言 處理復(fù)雜運算,執(zhí)行復(fù)雜過程 豐富的庫函數(shù) 數(shù)據(jù)庫訪問的困難 嵌入的SQL 方便的數(shù)據(jù)庫訪問 事務(wù)處理能力 上下文無關(guān),無法處理復(fù)雜過程,嵌入式SQL,處理復(fù)雜過程 宿主語言 訪問數(shù)據(jù)庫 嵌入的SQL語句,嵌入式SQL,宿主語言與嵌入的SQL語句 不同的體系 DB廠商提供庫函數(shù) 需對SQL語句進行預(yù)編譯宿主語言的體系 SQL語句宿主語言的函數(shù)調(diào)用(參數(shù)) 統(tǒng)一編譯目標程序 嵌入式SQL語句 由EXEC SQL引導(dǎo)、以;結(jié)尾 EXEC SQL Delete From 學(xué)生;,匹配失衡問題,數(shù)據(jù)模型之間的匹配 SQL關(guān)系數(shù)據(jù)模型 宿主語言傳統(tǒng)數(shù)據(jù)模型 整數(shù)、實數(shù)、指針 尋找兩者之間的平衡點 SQL數(shù)據(jù)以單個元組出現(xiàn) 避免元組的集合(組合),SQL/宿主語言的接口,變量 儲存數(shù)據(jù)的單元 SQL/宿主語言通過變量傳遞信息 共同的變量集合共享變量 以傳統(tǒng)的方式在宿主語言中使用 在SQL語句中使用(以:作前綴),變量的聲明,宿主變量 僅用于宿主語言的語句中 共享變量 可在宿主語言、嵌入的SQL語句中使用 共享變量聲明段,變量的聲明,int i = 2,j = 3; EXEC SQL BEGIN DECLARE SECTION; char 學(xué)號8,姓名20; char 所在系6; EXEC SQL END DECLARE SECTION;,使用共享變量,嵌入式SQL中,以共享變量替代具體的值 在運行時獲得變量的值,使用共享變量,Update、Insert中直接使用,替代值 EXEC SQL Update 學(xué)生 Set 所在系 = :所在系 Where 姓名 = :姓名; 在Select-From-Where中需注意 單元組 多元組:引入游標(Cursor),逐行處理,單元組查詢語句,只返回一個元組的Select-From-Where語句 Select-Into-From-Where EXEC SQL Select 學(xué)號 Into :學(xué)號 From 學(xué)生 Where 姓名 = :姓名; 注意返回值的狀態(tài)判定,游標Cursor,Cursor是系統(tǒng)為用戶開設(shè)的一個數(shù)據(jù)緩沖區(qū),存放SQL語句的執(zhí)行結(jié)果 用戶可以逐行讀?。ㄌ幚恚㏒elect結(jié)果集中的數(shù)據(jù) Cursor result Set Cursor Position,動態(tài)SQL,語句可變 條件可變 數(shù)據(jù)庫對象、查詢條件均可變,SQL中的事務(wù),是構(gòu)成單一邏輯工作單元的操作集合 事務(wù)管理器 事務(wù)恢復(fù)機制 并發(fā)調(diào)度機制,事務(wù)的性質(zhì)ACID,原子性: 事務(wù)是原子的,要么都做,要么都不做 一致性: 保證數(shù)據(jù)庫的一致性 從一個一致狀態(tài)另一個一致狀態(tài) 隔離性: 事務(wù)相互隔離 持久性 一旦事務(wù)提交成功,更新則將永久有效,SQL中的事務(wù)事務(wù)的結(jié)束,提交 COMMIT 事務(wù)成功結(jié)束,永久保存修改 將上次提交后的修改,全部保存 回滾 ROLLBACK 事務(wù)異常終止,撤消修改,恢復(fù)原值 將上次提交后的修改,全部撤消,SQL編程嵌入式,嵌入式SQL DBMS提供的高級語言方式 Host Variable & Share Variable 直接使用SQL語句 需預(yù)編譯 各DBMS廠商均提供相應(yīng)的工具,SQL編程CLI(API),CLI(Call Level Interface) 定義了一套可以從宿主語言調(diào)用的公共函數(shù) 提供一套API,通過函數(shù)調(diào)用,實現(xiàn)對DBMS的操作 DBLib、OCI、 ODBC、JDBC 逐步替代嵌入式SQL,Application,Oracle,OCI,Oracle 的CLI模型,ODBC(Open DataBase Connectivty :開放數(shù)據(jù)庫互連),ODBC是Microsoft Windows Open Standards Architecture (WOSA,Windows開放服務(wù)體系)的重要組成部分,由Microsoft公司于1991年底發(fā)布,短短幾年已成為事實上的工業(yè)標準.它建立了一組規(guī)范,提供了一套分層(隨著層的擴展,數(shù)據(jù)服務(wù)能力不斷的增強)的標準API(支持SQL),它解決了嵌入式SQL接口的非規(guī)范核心,數(shù)據(jù)應(yīng)用系統(tǒng)用它來訪問任何提供了ODBC驅(qū)動程序(一組DLL)的數(shù)據(jù)庫,結(jié)束了過去針對不同的數(shù)據(jù)庫系統(tǒng)開發(fā)須掌握相應(yīng)數(shù)據(jù)訪問API的時代.事實上,可將ODBC體系看作統(tǒng)一的數(shù)據(jù)訪問界面,而使這種統(tǒng)一的數(shù)據(jù)訪問成為可能的就是各數(shù)據(jù)庫產(chǎn)品廠商提供的相應(yīng)的ODBC Provider(ODBC提供者即ODBC 驅(qū)動)。,結(jié)合ODBC API調(diào)用順序描敘工作流程:初始化(分配環(huán)境-分配連接句柄-與服務(wù)器連接-分配語句句柄)-SQL處理(語句處理和檢索部分)-終止(釋放語句句柄-與服務(wù)器斷開-釋放連接句柄-釋放環(huán)境),OLE DB (Object Link and Embedding DataBase),OLE DB作為一種數(shù)據(jù)訪問接口體系,體現(xiàn)了Microsoft的通用數(shù)據(jù)訪問(UDA)策略的理念.UDA能夠通過標準接口來訪問各種類型的數(shù)據(jù).同于ODBC體系它也提供了一套標準API,不過OLE DB API是完全基于COM的,其特點是采用了多層模型.在COM通信層的一側(cè)是數(shù)據(jù)另一側(cè)則是數(shù)據(jù)使用者.這種基于COM的通信可被概括為在抽象對象(如DataSource、Session、Command 和 Rowset)上執(zhí)行的操作.因此,當使用者連接到DataSource,打開 Session,發(fā)出Command,并返回數(shù)據(jù)Rowset時,便會出現(xiàn)這種情況. 事實上,OLE DB是系統(tǒng)級的編程接口,它定義了一組COM接口,這組接口封裝了各種數(shù)據(jù)系統(tǒng)的訪問操作,這組接口為數(shù)據(jù)使用者和數(shù)據(jù)提供者建立了標準,OLE DB還提供了一組標準的服務(wù)組件,用于提供查詢、緩存、數(shù)據(jù)更新、事務(wù)處理等操作,因此數(shù)據(jù)提供方只需實現(xiàn)一些簡單的數(shù)據(jù)操作.在使用方就可以獲得全部的數(shù)據(jù)控制能力.,OLE DB組成,數(shù)據(jù)提供者(Data Provider) 提供數(shù)據(jù)存儲的組件和數(shù)據(jù),數(shù)據(jù)小到普通的文本文件、大到主機上的復(fù)雜數(shù)據(jù)庫,或者電子郵件存儲,都是數(shù)據(jù)提供者的例子.有 的文檔把這些軟件組件的開發(fā)商也稱為數(shù)據(jù)提供者. 數(shù)據(jù)服務(wù)提供者(Data Service Provider) 位于數(shù)據(jù)提供者之上、從過去的數(shù)據(jù)庫管理系統(tǒng)中分離出來、獨立運行的功能組件,例如查詢處理器和游標引擎(Cursor Engine),這些組件使得數(shù)據(jù)提供者提供的數(shù)據(jù)以表狀數(shù)據(jù)(Tabular Data)的形式向外表示(不管真實的物理數(shù)據(jù)是如何組織和存儲的),并實現(xiàn)數(shù)據(jù)的查詢和修改功能.SQL Server 7.0 的查詢處理程序就是這種組件的典型例子. 數(shù)據(jù)消費者(Data Consumer) 任何需要訪問數(shù)據(jù)的系統(tǒng)程序或應(yīng)用程序,除了典型的數(shù)據(jù)庫應(yīng)用程序之外,還包括需要訪問各種數(shù)據(jù)源的開發(fā)工具或語言.,1、統(tǒng)計有學(xué)生選修的課程門數(shù) 2、求選修了數(shù)據(jù)庫課的學(xué)生的平均年齡 3、求劉宇老師所授課程的每門課程的學(xué)生平均值 4、統(tǒng)計每門課程的學(xué)生選修人數(shù)。要求輸出課程號和人數(shù), 查詢結(jié)果按人數(shù)降序排列,若人數(shù)相同,按課程號升序排列 5、檢索學(xué)號比汪同學(xué)大,而年齡比他小的學(xué)生姓名 6、求年齡大于女同學(xué)平均年齡的男學(xué)生姓名和年齡 7、求年齡大于所有女同學(xué)年齡的男學(xué)生姓

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論