版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
歡迎閱讀本文檔,希望本文檔能對您有所幫助!歡迎閱讀本文檔,希望本文檔能對您有所幫助!歡迎閱讀本文檔,希望本文檔能對您有所幫助!歡迎閱讀本文檔,希望本文檔能對您有所幫助!歡迎閱讀本文檔,希望本文檔能對您有所幫助!歡迎閱讀本文檔,希望本文檔能對您有所幫助!DDL創(chuàng)建數(shù)據(jù)庫,表以及約束(極客時(shí)間學(xué)習(xí)筆記)DDLDDL是DBMS的核心組件,是SQL的重要組成部分.DDL的正確性和穩(wěn)定性是整個(gè)SQL發(fā)型的重要基礎(chǔ).DDL的基礎(chǔ)語法及設(shè)計(jì)工具DDL的英文是DataDefinitionLanguage,也就是數(shù)據(jù)定義語言.定義了數(shù)據(jù)庫的結(jié)構(gòu)和數(shù)據(jù)表的結(jié)構(gòu).常用的功能急救室增刪改,對應(yīng)的命令分別是CREATE、DROP和ALTER.對數(shù)據(jù)庫進(jìn)行定義CREATEDATABASEnba;//創(chuàng)建名為nba的數(shù)據(jù)庫DROPDATABASEnba;//刪除名為nba的數(shù)據(jù)庫對數(shù)據(jù)表進(jìn)行定義CREATETABLEtable_name;//創(chuàng)建表,table_name指表名創(chuàng)建表的結(jié)構(gòu)呢?舉個(gè)實(shí)際的例子,我們創(chuàng)建一個(gè)球員表,表名為player,里面有兩個(gè)字段,一個(gè)是player_id,它是int類型,另一個(gè)是player_name字段是varchar(255)類型,兩個(gè)字段都不能為空,并且player_id是遞增的.接下來創(chuàng)建表的語句這么就是:CREATETABLEplayer(player_idint(11)NOTNULLAUTO_INCREMENT,player_namevarchar(255)NOTNULL);注意的是每個(gè)字段定義的語句最后使用,作為結(jié)束符,最后一個(gè)字段的定義結(jié)束之后沒有逗號的,并且語句最后是以;結(jié)尾的.數(shù)據(jù)類型中int(11)代表整數(shù)類型,顯示長度是11位,括號中的參數(shù)11代表的是最大有效顯示長度,與類型包含的數(shù)值大小無關(guān).varchar(255)代表的是最大長度為255的可變字符串類型.NOTNULL表名整個(gè)字段不能為空值,是一種數(shù)據(jù)約束.AUTO_INCREMENT代表主鍵自動(dòng)增長.(一般情況下使用可視化工具類創(chuàng)建和操作數(shù)據(jù)庫和數(shù)據(jù)庫表,比如Navicat)接下來針對player表,設(shè)計(jì)下面字段:其中player_id是數(shù)據(jù)表player的主鍵,且自動(dòng)增長,也就是player_id會(huì)從1開始,然后每次加一,不必為它賦值.player_id、team_id、player_name這三個(gè)字段均不為空,height字段可以為空.使用Navicat工具創(chuàng)建表并導(dǎo)出的SQL文件如下所示:DROPTABLEIFEXISTS`player`;CREATETABLE`player`(`player_id`int(11)NOTNULLAUTO_INCREMENT,`team_id`int(11)NOTNULL,`team_name`varchar(255)CHARACTERSETutf8collateutf8_general_ciNOTNULL,`height`float(3,2)NULLDEFAULT0.00,PRIMARYKEY(`player_id`)USINGBTREE,UNIQUEINDEX`player_name`(`player_name`)USINGBTREE)ENGINE=InnoDBCHARACTERSET=utf8COLLATE=utf8_general_ciROW_FORMAT=Dynamic;可以看到整個(gè)SQL文件中的DDL處理,首先刪除player表(如果數(shù)據(jù)庫中存在該表的話),然后再創(chuàng)建player表,里面的字段名和表名都使用了反引號,這是為了避免名稱與MYSQL保留字段相同,對數(shù)據(jù)庫表和字段名都加上反引號.其中player_name字段的字符集是utf8,排序規(guī)則是utf8_general_ci,代表對大小寫不敏感,如果設(shè)置為utf8_bin,表示對大小寫敏感.因?yàn)閜layer_id設(shè)置為了主鍵,所以在DDL中使用PRIMARYKEY進(jìn)行規(guī)定,同時(shí)索引方法采用BTREE.對player_name字段進(jìn)行索引,在設(shè)置索引時(shí),可以設(shè)置UNIQUEINDEX(唯一索引),也可以設(shè)置為其它索引方式,比如NORMALINDEX(普通索引),這里我們采用UNIQUEINDEX.唯一索引和普通索引的區(qū)別在于對字段進(jìn)行了唯一性約束.在索引方式上,可以選擇BTREE和HASH,這里采用BTREE方法進(jìn)行索引.整個(gè)數(shù)據(jù)表的存儲(chǔ)規(guī)則采用InnoDB,是MYSQL5.5之后的默認(rèn)存儲(chǔ)引擎,將字符集設(shè)置為utf8,排序規(guī)則設(shè)置為utf8_general_ci,行格式為Dynamic,就可以定義數(shù)據(jù)表的最后約定了:ENGINE=InnoDBCHARACTERSET=utf8COLLATE=utf8_general_ciROW_FORMAT=Dynamic;修改表結(jié)構(gòu)創(chuàng)建完表之后,可以對表結(jié)構(gòu)進(jìn)行修改,使用DDL命令來完成.添加字段ALTERTABLEplayerADD(ageint(11));修改字段名,將age字段改成player_ageALTERTABLEplayerRENAMECOLUMNagetoplayer_age;修改字段的數(shù)據(jù)類型ALTERTABLEplayerMODIFT(player_agefloat(3,1));刪除字段,刪除剛才添加的player_age字段ALTERTABLEplayerDROPCLOUMNplayer_age;數(shù)據(jù)表的常見約束在創(chuàng)建數(shù)據(jù)表的時(shí)候,會(huì)對字段進(jìn)行約束,約束的目的在于保證RDBMS里面的數(shù)據(jù)的準(zhǔn)確性和一致性.主鍵約束主鍵起的作用是唯一標(biāo)識一條記錄,不能重復(fù),不能為空,即UNIQUE+NOTNULL.一個(gè)數(shù)據(jù)表的主鍵只能有一個(gè).但是主鍵可以是一個(gè)字段,也可以是多個(gè)字段符合組成.上面的player_id就是主鍵.外鍵約束外鍵起的作用是確保表與表之間引用的完整性.一個(gè)表中的外鍵對應(yīng)了另外一張表中的主鍵.外鍵可以重復(fù)并且可以為空.比如player_id是player表的主鍵,如果想設(shè)置一個(gè)球員比分表player_score,可以再player_score中設(shè)置player_id為外鍵,關(guān)聯(lián)到player表.唯一約束唯一約束就是表明字段在表中的數(shù)值唯一,主要是對除主鍵以外的其他字段(主鍵自帶數(shù)值唯一BUFF).上面對player_name進(jìn)行了唯一性約束,也就是說球員的姓名不能相同.注意的是唯一性約束和普通索引(NORMALINDEX)之間的區(qū)別:唯一性約束相當(dāng)于創(chuàng)建了一個(gè)約束和普通索引,目的是保證字段的正確性,而普通索引只是提升數(shù)據(jù)檢索的速度,并不對字段的唯一性進(jìn)行約束.NOTNULL約束對字段定義了NOTNULL,表明字段不能為空,必須有取值.DEFAULT表明字段的默認(rèn)值,如果在插入數(shù)據(jù)的時(shí)候該字段沒有取值,就設(shè)置為默認(rèn)值.CHECK約束用來檢查特定字段取值范圍的有效性,CHECK約束的結(jié)果不能為FALSE.設(shè)計(jì)數(shù)據(jù)表的原則三少一多的原則:數(shù)據(jù)表的個(gè)數(shù)越少越好RDBMS的核心在于對實(shí)體和聯(lián)系的定義,也就是E-R圖(EntityRelationDiagram),數(shù)據(jù)表越少,說明實(shí)體和聯(lián)系設(shè)計(jì)得越簡潔,即方便理解有方便操作.數(shù)據(jù)表中的字段個(gè)數(shù)越少越好字段個(gè)數(shù)越多,數(shù)據(jù)冗余的可能性越大.設(shè)置字段個(gè)數(shù)少的前提是各個(gè)字段相互獨(dú)立,而不是某個(gè)字段的取值可以由其它字段計(jì)算出來.當(dāng)然字段個(gè)數(shù)少是相對的,通常會(huì)在數(shù)據(jù)冗余和檢索效率中進(jìn)行平衡.數(shù)據(jù)表中聯(lián)合主鍵的字段個(gè)數(shù)越少越好設(shè)置主鍵是為了確定唯一性,當(dāng)一個(gè)字段無法確定唯一性,就需要采用聯(lián)合主鍵的方式.聯(lián)合主鍵中的字段越多,占用的所以索引空間越大,會(huì)加大理解難度,會(huì)增加運(yùn)行時(shí)間和索引空間.使用主鍵和外鍵越多越好數(shù)據(jù)庫的設(shè)計(jì)實(shí)際上就是定義各種表,一級各種字段間的關(guān)系,關(guān)系越多,證明實(shí)體之間的冗余度越低,利用度越高,這樣做的好處在于不僅保證數(shù)據(jù)表之間的獨(dú)立性,還能提升相互之間的關(guān)聯(lián)使用率.(不過在我現(xiàn)在的公司,基本上沒有使用外鍵,不知道是因?yàn)橛绊懶蔬€是什么,外鍵的意義起不到作用)作者的意思是大型項(xiàng)目中后期,可以采用業(yè)務(wù)層來實(shí)現(xiàn),取消外鍵提高效率。不過在SQL學(xué)習(xí)之初,包括在系統(tǒng)最初設(shè)計(jì)的時(shí)候,還是建議你采用規(guī)范的數(shù)據(jù)庫設(shè)計(jì),也就是采用外鍵來對數(shù)據(jù)表進(jìn)行約束。因?yàn)檫@樣可以建立一個(gè)強(qiáng)一致性,可靠性高的數(shù)據(jù)庫結(jié)構(gòu),也不需要在業(yè)務(wù)層來實(shí)現(xiàn)過多的檢查。當(dāng)然在項(xiàng)目后期,業(yè)務(wù)量增大的情況下,你需要更多考慮到數(shù)據(jù)庫性能問題,可以取消外鍵的約束,轉(zhuǎn)移到業(yè)務(wù)層來實(shí)現(xiàn)。而且在大型互聯(lián)網(wǎng)項(xiàng)目中,考慮到分庫分表的情況,也會(huì)降低外鍵的使
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙江長征職業(yè)技術(shù)學(xué)院《海洋地質(zhì)與環(huán)境實(shí)驗(yàn)技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江海洋大學(xué)《建筑信息建模技術(shù)應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州電子信息職業(yè)技術(shù)學(xué)院《內(nèi)部控制學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 昭通職業(yè)學(xué)院《新能源勘查與評價(jià)》2023-2024學(xué)年第一學(xué)期期末試卷
- 企業(yè)微信在B2B營銷中的應(yīng)用實(shí)踐與挑戰(zhàn)
- DB2201T 65.2-2024 肉牛飼養(yǎng)技術(shù)規(guī)范 第2部分:能繁母牛
- 生物學(xué)基礎(chǔ)講座模板
- 房地產(chǎn)經(jīng)紀(jì)操作實(shí)務(wù)-《房地產(chǎn)經(jīng)紀(jì)操作實(shí)務(wù)》預(yù)測試卷2
- 品牌故事打造模板
- 二零二五年度拆遷安置房購房法律援助合同3篇
- 大健康商業(yè)招商計(jì)劃書
- 高一上半學(xué)期總結(jié)教學(xué)課件
- 高速公路初步設(shè)計(jì)匯報(bào)課件
- 申根簽證申請表模板
- 企業(yè)會(huì)計(jì)準(zhǔn)則、應(yīng)用指南及附錄2023年8月
- 2022年浙江省事業(yè)編制招聘考試《計(jì)算機(jī)專業(yè)基礎(chǔ)知識》真題試卷【1000題】
- 認(rèn)養(yǎng)一頭牛IPO上市招股書
- GB/T 3767-2016聲學(xué)聲壓法測定噪聲源聲功率級和聲能量級反射面上方近似自由場的工程法
- GB/T 23574-2009金屬切削機(jī)床油霧濃度的測量方法
- 動(dòng)物生理學(xué)-全套課件(上)
- 河北省衡水市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)
評論
0/150
提交評論