關(guān)聯(lián)表記錄的刪除操作_第1頁
關(guān)聯(lián)表記錄的刪除操作_第2頁
關(guān)聯(lián)表記錄的刪除操作_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、1. 關(guān)聯(lián)表記錄的刪除操作關(guān)聯(lián)型數(shù)據(jù)表通過外鍵關(guān)系表示相互關(guān)聯(lián),比如會員等級和會員、會員和會員積分、積分日志、地區(qū)表(自關(guān)聯(lián))、文章分類和文章、商品分類和商品等,因此在系統(tǒng)中關(guān)聯(lián)型數(shù)據(jù)表是非常常見的形式,掌握好對關(guān)聯(lián)型數(shù)據(jù)表的處理至關(guān)重要。根據(jù)業(yè)務(wù)需求的不同,對于關(guān)聯(lián)型數(shù)據(jù)表的數(shù)據(jù)刪除也采用不同的策略,通常有3種方式:級聯(lián)刪除、限制刪除、置空或重置為缺省值。級聯(lián)刪除以會員和會員積分日志為例,會員積分日志通常需要選定一個會員,查看該會員的日志信息,當(dāng)該會員記錄被刪除時,積分日志就沒有查看的入口,稱之為“垃圾”數(shù)據(jù)。因此在刪除會員時,同時也把該會員的積分日志也刪除。限制刪除以會員等級和會員為例,在

2、本系統(tǒng)中,會員等級包含了根據(jù)積分自動計算會員等級的非特殊會員組,非特殊會員組與會員不是關(guān)聯(lián)關(guān)系,此處會員等級僅指代特殊會員組。當(dāng)會員等級被刪除時,可以刪除屬于該會員等級的會員嗎?顯示不能,而且是相當(dāng)危險的一種行為,會員信息的丟失,屬于網(wǎng)站的重大工作事故。如何解決會員等級的刪除呢?解決思路是:如果沒有屬于此會員等級的會員,那么刪除該會員等級對系統(tǒng)就沒有任何影響了,所以在刪除會員等級時,需要檢查會員表是否有屬于此會員等級的數(shù)據(jù),如果沒有,則允許刪除,否則限制刪除。直接提示不能刪除,顯然對用戶不是很友好,如何能提高友好性呢?做為課外題,大家可以思考一下。置空setnull/重置為缺省值setdefa

3、ult置空是刪除數(shù)據(jù)時,將關(guān)聯(lián)數(shù)據(jù)表的外鍵設(shè)置為null或者為缺省值。置空也是保留關(guān)聯(lián)數(shù)據(jù)的一種方法,通常用于外鍵可以不設(shè)置或者對于未設(shè)置的數(shù)據(jù)有相關(guān)處理,比如QQ的好友和組,好友可以分配到特定組里,未分組的好友都在“我的好友”里,當(dāng)刪除組時,并不會刪除組里的好友,好友會在“我的好友”里顯示。了解了關(guān)聯(lián)數(shù)據(jù)的刪除邏輯后,怎樣實現(xiàn)呢?方法有很多,這里介紹2種方式:通過外鍵約束和刪除關(guān)聯(lián)表的SQL語句。外鍵約束:大部分DBMS都支持外鍵約束,Mysql中只有Innodb類型的數(shù)據(jù)表才支持,創(chuàng)建表時通過建立外鍵,并設(shè)置約束方法。MySQL創(chuàng)建關(guān)聯(lián)表可以理解為是兩個表之間有個外鍵關(guān)系,但這兩個表必須滿

4、足三個條件:1 .兩個表必須是InnoDB數(shù)據(jù)引擎2 .使用在外鍵關(guān)系的域必須為索引型(Index)3 .使用在外鍵關(guān)系的域必須與數(shù)據(jù)類型相似Mysql創(chuàng)建關(guān)鍵表的示例(圖書館借書和成員):CreateTABLEIFNOTEXISTS'books'('book_id'smallint(6)NOTNULLauto_incrementCOMMENT'書籍編號','book_name'char(20)NOTNULLCOMMENT'書名','book_borrower'char(7)defaultNULLC

5、OMMENT'借閱者','book_borrower_time'datedefaultNULLCOMMENT'借閱時間,PRIMARYKEY('book_id'),INDEX(book_borrower)ENGINE=InnoDB;CreateTABLEIFNOTEXISTS'parts'('part_id'smallint(6)NOTNULLCOMMENT'成員編號','part_name'varchar(6)NOTNULLCOMMENT'成員名','

6、;part_mail'varchar(50)NOTNULLCOMMENT'郵箱','part_pass'varchar(20)NOTNULLCOMMENT'密碼',PRIMARYKEY('part_id'),FOREIGNKEY(part_name)REFERENCES00ks(book_borrower)ondeletecascadeonupdatecascade)ENGINE=InnoDB分析一下books表和parts表,選擇InnoDB為表引擎。而parts表的part_name字段為外鍵,關(guān)聯(lián)到books表的bo

7、ok_borrower字段.注意兩個字段分別是char和varchar都是字符串類型。ondeletecascade意思為當(dāng)books表有相關(guān)記錄刪除時,那parts表也會跟著刪除相關(guān)聯(lián)的記錄.理論上parts表的part_name字段也應(yīng)該要創(chuàng)建索引才對,但實驗證創(chuàng)建關(guān)聯(lián)后自動索引了.不同DBMS支持的約束不同,Mysql5.0支持cascade(級聯(lián)操作)、restrict(限制操作),不寫約束條件表示不進(jìn)行任何操作(垃圾數(shù)據(jù))。與ondelete(刪除操作)對應(yīng)的還有onupdate(當(dāng)關(guān)聯(lián)主表的關(guān)聯(lián)字段內(nèi)容更新時)的處理,請大家思考其中的業(yè)務(wù)邏輯。Sql語句刪除多表數(shù)據(jù)1、通過多條SQ

8、L語句刪除先刪除子表數(shù)據(jù),再刪除主表數(shù)據(jù),為保證數(shù)據(jù)完整性,通常啟動事務(wù)來處理,如果要支持事務(wù),也需要InnoDb的數(shù)據(jù)表類型。2、在一條SQL語句中刪除delete語法:DELETELOW_PRIORITYQUICKFROMtable_nameWHEREwhere_definitionORDERBYLIMITrowsorDELETELOW_PRIORITYQUICKtable_name.*,table_name.*FROMtable-referencesWHEREwhere_definitionorDELETELOW_PRIORITYQUICKFROMtable_name.*,table_n

9、ame.*USINGtable-referencesWHEREwhere_definition示例代碼:1 .刪除一個表中的數(shù)據(jù)deletefromdepartmentwherename='AssetManagement'2 .刪除兩個表中的數(shù)據(jù)deleteemployee,employeeSkillsfromemployee,employeeSkills,departmentwhereemployee.employeeID=employeeSki11s.employeeIDandemployee.departmentID=department.departmentID='Finance'3 .刪除兩個表中的數(shù)據(jù),用using語法deletefromemployee,employeeSkillsusingemployee,employeeSkil

溫馨提示

  • 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

提交評論