數(shù)據(jù)庫常用五類約束_第1頁
數(shù)據(jù)庫常用五類約束_第2頁
數(shù)據(jù)庫常用五類約束_第3頁
數(shù)據(jù)庫常用五類約束_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

數(shù)據(jù)庫常用五類約束:MySQL中約束保存在information_schema數(shù)據(jù)庫的table_constraints中,可以通過該表查詢約束信息;約束主要完成對(duì)數(shù)據(jù)的檢驗(yàn),保證數(shù)據(jù)庫數(shù)據(jù)的完整性;如果有相互依賴數(shù)據(jù),保證該數(shù)據(jù)不被刪除。常用五類約束:notnull:非空約束,指定某列不為空unique:唯一約束,指定某列和幾列組合的數(shù)據(jù)不能重復(fù)primarykey:主鍵約束,指定某列的數(shù)據(jù)不能重復(fù)、唯一foreignkey:外鍵,指定該列記錄屬于主表中的一條記錄,參照另一條數(shù)據(jù)check:檢查,指定一個(gè)表達(dá)式,用于檢驗(yàn)指定數(shù)據(jù)注意:MySQL不支持check約束,但可以使用check約束,而沒有任何效果;根據(jù)約束數(shù)據(jù)列限制,約束可分為:?jiǎn)瘟屑s束:每個(gè)約束只約束一列多列約束:每個(gè)約束約束多列數(shù)據(jù)1、notnull非空約束用于確保當(dāng)前列的值不為空值,非空約束只能出現(xiàn)在表對(duì)象的列上。Null類型特征:所有的類型的值都可以是null,包括int、float等數(shù)據(jù)類型空字符串”是不等于null,0也不等于nullcreatetabletemp(idintnotnull,namevarchar(255)notnulldefault‘a(chǎn)bc',sexcharnull)上面的table加上了非空約束,也可以用alter來修改或增加非空約束增加非空約束altertabletempmodifysexvarchar(2)notnull;取消非空約束altertabletempmodifysexvarchar(2)null;取消非空約束,增加默認(rèn)值altertabletempmodifysexvarchar(2)default‘a(chǎn)bc';2、unique唯一約束是指定table的列或列組合不能重復(fù),保證數(shù)據(jù)的唯一性。雖然唯一約束不允許出現(xiàn)重復(fù)的值,但是可以為多個(gè)null,同一個(gè)表可以有多個(gè)唯一約束,多個(gè)列組合的約束。在創(chuàng)建唯一約束的時(shí)候,如果不給唯一約束名稱,就默認(rèn)和列名相同。MySQL會(huì)給唯一約束的列上默認(rèn)創(chuàng)建一個(gè)唯一索引;createtabletemp(idintnotnull,namevarchar(25),passwordvarchar(16),constraintuk_name_pwdunique(name,password));表示用戶名和密碼組合不能重復(fù)添加唯一約束altertabletempaddunique(name,password);修改唯一性約束altertabletempmodifynamevarchar(25)unique;刪除約束altertabletempdropindexname;3、primarykey主鍵約束相當(dāng)于唯一約束+非空約束的組合,主鍵約束列不允許重復(fù),也不允許出現(xiàn)空值;如果的多列組合的主鍵約束,那么這些列都不允許為空值,并且組合的值不允許重復(fù)。每個(gè)表最多只允許一個(gè)主鍵,建立主鍵約束可以在列級(jí)別創(chuàng)建,也可以在表級(jí)別上創(chuàng)建。MySQL的主鍵名總是PRIMARY,當(dāng)創(chuàng)建主鍵約束時(shí),系統(tǒng)默認(rèn)會(huì)在所在的列和列組合上建立對(duì)應(yīng)的唯一索引。列模式:createtabletemp(idintprimarykey,namevarchar(25));createtabletemp2(idintnotnull,namevarchar(25),pwdvarchar(15),constraintpk_temp_idprimarykey(id));組合模式:createtabletemp2(idintnotnull,namevarchar(25),pwdvarchar(15),constraintpk_temp_idprimarykey(name,pwd));alter刪除主鍵約束altertabletempdropprimarykey;alter添加主鍵altertabletempaddprimarykey(name,pwd);alter修改列為主鍵altertabletempmodifyidintprimarykey;設(shè)置主鍵自增createtabletemp(idintauto_incrementprimarykey,namevarchar(20),pwdvarchar(16));auto_increment自增模式,設(shè)置自增后在插入數(shù)據(jù)的時(shí)候就不需要給該列插入值了。4、foreignkey外鍵約束是保證一個(gè)或兩個(gè)表之間的參照完整性,外鍵是構(gòu)建于一個(gè)表的兩個(gè)字段或是兩個(gè)表的兩個(gè)字段之間的參照關(guān)系。也就是說從表的外鍵值必須在主表中能找到或者為空。當(dāng)主表的記錄被從表參照時(shí),主表的記錄將不允許刪除,如果要?jiǎng)h除數(shù)據(jù),需要先刪除從表中依賴該記錄的數(shù)據(jù),然后才可以刪除主表的數(shù)據(jù)。還有一種就是級(jí)聯(lián)刪除子表數(shù)據(jù)。注意:外鍵約束的參照列,在主表中引用的只能是主鍵或唯一鍵約束的列,假定引用的主表列不是唯一的記錄,那么從表引用的數(shù)據(jù)就不確定記錄的位置。同一個(gè)表可以有多個(gè)外鍵約束。創(chuàng)建外鍵約束:主表createtableclasses(idintauto_incrementprimarykey,namevarchar(20));從表createtablestudent(idintauto_increment,namevarchar(22),constraintpk_idprimarykey(id),classes_idintreferencesclasses(id));通常先建主表,然后再建從表,這樣從表的參照引用的表才存在。表級(jí)別創(chuàng)建外鍵約束:createtablestudent(idintauto_incrementprimarykey,namevarchar(25),classes_idint,foreignkey(classes_id)referencesclasses(id));上面的創(chuàng)建外鍵的方法沒有指定約束名稱,系統(tǒng)會(huì)默認(rèn)給外鍵約束分配外鍵約束名稱,命名為student_ibfk_n,其中student是表名,n是當(dāng)前約束從1開始的整數(shù)。指定約束名稱:createtablestudent(idintauto_incrementprimarykey,namevarchar(25),classes_idint,constraintfk_classes_idforeignkey(classes_id)referencesclasses(id));多列外鍵組合,必須用表級(jí)別約束語法:createtableclasses(idint,namevarchar(20),numberint,primarykey(name,number));createtablestudent(idintauto_incrementprimarykey,namevarchar(20),classes_namevarchar(20),classes_numberint,foreignkey(classes_name,classes_number)referencesclasses(name,number));刪除外鍵約束:altertablestudentdropforeignkeystudent_ibfk_1;altertablestudentdropforeignkeyfk_student_id;增加外鍵約束:altertablestudentaddforeignkey(classes_name,classes_number)referencesclasses(name,number);自引用、自關(guān)聯(lián)(遞歸表、樹狀表)createtabletree(idintauto_incrementprimarykey,namevarchar(50),parent_idint,foreignkey(parent_id)referencestree(id));級(jí)聯(lián)刪除:刪除主表的數(shù)據(jù)時(shí),關(guān)聯(lián)的從表數(shù)據(jù)也刪除,則需要在建立外鍵約束的后面增加ondeletecascade或ondeletesetnull,前者是級(jí)聯(lián)刪除,后者是將從表的關(guān)聯(lián)列的值設(shè)置為null。createtablestudent(idintauto_incrementprimarykey,namevarchar(20),classes_namevarchar(20),classes_numberint,/*表級(jí)別聯(lián)合外鍵*/foreignkey(classes_name,classes_number)referencesclasses(name,number)ondeletecascad

溫馨提示

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

評(píng)論

0/150

提交評(píng)論