

下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、夕卜鍵foreign key2013 年 4 月 17 日星期三09:48概念:如果一個實體的(student)的某個字段(stude nt:class_id),指向(引用)另個實體(class)的主鍵(class:class_id),就稱Student實體的class_id是外鍵。被指向的實體,稱之為主實體(主表),也叫父實體(父表)。class負責指向的實體, 稱之為從實體 (從表) ,也叫子實體 (子表)。Stude nt作用:保證數據的完整性。用于約束處于關系內的實體。增加子表記錄時,是否有與之對應的父表 記錄。在刪除或者更新主表記錄時,從表應該如 何處理相關的記錄。定義一個外鍵:在從
2、表上,增加一個外鍵 字段,指向主表的主鍵。使用關鍵字foreign keyForeig n Key (外鍵字段) references 主表名(關聯字段)主表記錄 刪除時的動作主表 記錄更新時的動作& / /I375drop table if exists itca 匚 reate tableitcast_class376class_id int primary k&y377class_name varchar(10) no137S)character set utfS;3794389drop table if exist 占 itcsi_1381匚廠 eate table i
3、tcas一 設置級聯操作:在主表數據發生改變時,與之關 聯的從表數據應該如何處理:主表更新:主表刪除:使用關鍵字:On updateOn delete來標識。允許的級聯動作:Cascade 關聯操作,如果主 表被更新或刪除,那么 從表也會執行相應的操作。shou create七able itcast_studentfiTable: itcast_studentSet null: 設置為 null, 表示從 表不指向任何主表記錄。Restrict:拒絕主表的相關操作。修改這個外鍵:先刪除,在新建。通過修改表 完成。Alter table tbl_name drop foreignkey夕卜鍵標識
4、;刪除外鍵需要通過指定外鍵名稱達到目的:可以通過在創建外鍵時, 制定 名稱,或者使用mysql默認生成的名 稱KFV 1id ENGNE=InnoDB AUTOJHCREHENT =3 DEFAULT CHAPl*ea.te Table: CREATE TABLE itcast_studentE七u_idint NOT NULL fiUTO_IHCfiEMENT, tu_nameuarchaF NOT NULL DEFAULT class-id irit(11DEFAULT NULL,PRIMARY KE?row in set CO.00 sec iyscl .C0HSTRA1N1I itca
5、st-studjentibf1FOREIGN_c las s ENClNE=InnoDB PUTO_INCREMENT=3 DEFAULT CHA 1row in set m書EjqJ.alter table itcast_stu.dent di*opfoi*e i Query OK# 1 r*ou affected (0*98 secEecods = 1 Duulicate: 0 Uarninqs: 0Alter table tbl_ name add foreign key夕卜鍵定義altEr table itcast_studerrt add foreign key (class_id)
6、 references itc(class id)on delete set null;|pysql delete f rora itcast_class uhei*e class_id=l;Queii/ GK, .1 Fit初drftscLHil 0.95 lUVuhselect * from itcas:_class lEmpty select * from itcaist_student;+- + - + - +I stu_id I stujiane I class_id I2!張三豐:NULL :1 roi-Ji in set 9. IdH sec)395Set null關聯字段設置為
7、空:測試刪除:435 alter table itcast_st484 alter table itcast_st_ (1亦_i K)405 on del已t皀uasc自d皀;|4BE delete -From itcast_cldelete from itcastclass w he reQuerp OK, 1POWected select * f iDm it cast _c lass pEnptv set (0.0O sec nysql select* f Eom it cast .student Empty setrestrict測試On update指的是 只有主表的主鍵發生變化,才
8、會對從表反生影響412413alter table itcast_student drop foreign key itcast_student_ibfk_l;.4 alter table itcast_student add foreign key (class_idl) references itcast_class(class_id)on delete cascadeCascade級聯操作,執行對應的操作,刪除后 子數據也刪除,更新后子數據也更新刪除主表數據時,從表發生了刪除:restrict更新存在關聯的主表數據的主鍵字段:存儲引擎2013 年 4 月 17 日星期三11:29表類型默
9、認的服務器表類型, 通過my.ini可以配置:default-storage-e ngi ne=INNODB在創建表,或者編輯表時,可以指定表的存儲引擎:利用表屬性:engine引擎類型Engine myisamEngine innodb 421alter table itc|ast_class engine myisam;創建時,指定:create table room (room_id int primary key auto_increment room_no chart 3)engine myisam characte” set ut 卡 8;Innodb & myisam區別
10、保存的文件的方式不同:myisam,一個表,三個文件Tbl_name.frm結構Tbl_name.myd數據Tbl_name.myi索弓丨innodb:一個表一個文件:Tbl_name.frm結構所有的innodb表,都使用相同的innodb存儲表空間在保存數據和 索引mysqlVdata名稱丄Q 420667葩E4 ad5b遼1234hcreate二pr formanc e_s chema._php_one亙|E9SLEBYEMQSTVL err IglESSHBYRMQSTVIQI.pid到ib_lagfileO選澤存儲引孳的依據:1,勸能即1窯建InnoDBBDBArchive批盤插入的
11、&高務安全1支持全煤引吏持5* 5販本支持WL制b鎖行楨存閘陰制54TB沒耳砌駅1支持r曲支持支持r支捕支持紬當引支持四pnpJ.irrn圍|rcjom.frm Q room.HYD| 岡room.MY IexainEl.udenL. Ermexam teacher. frmi tcistfrmntuh i. rrm! I- h燈牛沛到Web纟式發送此El ibdatal;w- -菽蜩存1:支持箕除存支持支持支持般可壓堀支持支持低ISM/A內存便用低:高中弄支禱憾1支持innoDB&myisam數據和索引的保存的文件不同:MylSAM 是分開保存,而 innodb 是保存到表空
12、 間MylASM 支持索引壓縮,而 Innodb 索引和數據是綁定保存不壓縮,體積大。Innodb 很多時候是行級鎖,而 myisam 是表級鎖,innodb 的并發高。InnoDB 不支持 FULLTEXT 類型的索引(新版本的 InnoDB 也支持)。Innodb 支持事務,外鍵,數據完整性約束要強。而MYISAM 不支持。InnoDB 中不保存表的具體行數,也就是說,執行 select count(*) from table 時,InnoDB 要掃描一遍整個表來計算有多少行,但是 MylSAM 只要簡單的讀出保存 好的行數即可。注意的是,當 count(*)語句包含 where 條件時,
13、兩種表的操作是 一樣的。對于 AUTO_INCREMENT 類型的字段,InnoDB 中必須包含只有該字段的索引, 但是在MylSAM 表中,可以和其他字段一起建立聯合索引。范式(Normal Form)2013 年 4 月 17 日星期三14:03概念:用于規范表的設計的一套原則體系。規范表的結構: 體系:1NF,2NF,3NF,4NF。 各個級別的標準:1NF要求,表,所有的列(屬性),不能再分。具有原子性。通常,認為,不符合第一范式的表,不符合關系模型的定義。2NF滿足第一個范式基礎上。要求:每一行(記錄)必須能夠唯一標識。同時要求:不存在非主鍵字段,不能對主鍵有部分函數依賴。(在組合主
14、鍵前提下,表中非主鍵字段,有依賴于組合主鍵內的 個別字段依賴的情況)。韓忠康 Malb /php033110 30 天韓忠康 1 Male yphp0228106 30 天非主關龍字( 字段班級】上面的情呪- 分函數依賴.解決方案:常用的是增加一個單字段主鍵即可,可以保證,唯一標識,而且也不能形成部分函數依賴(沒有部分主鍵的講講師師P性別性別代課時間代課時間開始開始結束結束學號性別,年齡001男,12007女,29008男,21韓順平.male Php022810615 天2013-03-31 20132013-02-28 20132013-03-31 2013形咸了 組合主鍵教室.有班級字段
15、決定非主關鍵字(分字段(講性別,由講師決定北京&甜搐客教肓it cast rn3NF不能出現傳遞依賴 不能出現A-B-C這樣的結構。 如果出現,則說C傳遞依賴于A。1韓忠康Male php033110230天2013-03-31 2013-05-0S2韓忠康Male php022810630天2013-02-28 2013-03-303韓順平male php022810615天2013-03-31 2013-04-20沖怖依賴于 ID性別依賴于講師性別傳遞惓賴 ID方算:將講U缶實體,極王級實體分別保存形成新的實體戦直僦輙于班圾琲辺惓賴于 ID數呈傳遞依賴 ID實體上表示,一個關系(二
16、維表),只能 保存一個實體信息,不能同時保存多個信息。1韓忠康Malephp033110230 天2013-0-2韓忠康Malephp022810630 天2013-0;3韓順平malephp022810615 天2013-0;僅僅ID可以唯一襪識口分開三平丈燼.珂應設計關慕裏菽1韓忠康php0331.30天2013-03-31 2013-05-052韓忠康php0228-_303韓順平解決方案: 為講師,班級分別建立關系表,保存相應信息。通用原則:1,每個實體一個表(可以采取常用信息和詳細信息分開保存的思路)2,為一個關系(二維表)增加,一個邏輯主鍵(不屬于真實實體屬性的字段),用于做標 識
17、。3,出現二維表對應的關系,采用1:1, 1:N, M:n的形式 將關聯關系設計。實際的開發中,常常會為了,操作方便,編碼容易,做一些你規范化的事情。 例如,每次得到授課信息時,都需要得到教室號。如果不做逆規范話,每次都 需要2個表內獲得數據。可以考慮,將教室號,放入到代課信息內。查詢容易,編碼簡單。校對規則2013 年 4 月 16 日星期二 09:53F韓忠康*韓順平malemalePhp0228106北京傳智播客較肓ww rtcasl cn3.0-013-02-28 2013-03-30 /-04-20z每一套,編碼字符集都有與之相關的校對規則。什么是校對規則? 在當前編碼下,字符之間的
18、比較順序什么。每個字符集都支持不定數量的校對規則, 可以通過如下指令:Show collati on;可以看到:字符集_地區名_比較規則(ci,cs,bin)不區分,區分,字節比較可以使用like:nysql show co Hat ion like * gfbkx1S1Collation1 Charset1 Td! Default!Compiled! Sortlen1+- k-4-+-+- +! gbk_chinese_ci1 ghk1 28 !Ves! VesI1 ! ghk_hin丨訶! 87 : Yes:1 !-t- +-+-*-+-4 -+2POWSin set 在設置字符集的時,
19、可以設置當前字符集所采用的校對規則。如果不設置校對規則, 那么每一個字符集,都有一個默認的校對規則。以gbk為例,比較chinese_ci bin之間的區別創建2個表,一個chinese_ci一個是bin,插入相同的數據:Order by關鍵字,可以在獲得數據時,將數據進行按照某個字段的排序。 結果可以發現,aB的比較由于 規則的不同導致排序是不一致的。select * f rom tb!3 order bf name;|3 rows in set 0.00 secIm9sql select * from tbl4 order b書name;11 name 1riysql select* fr
20、om tb!3 iname查詢2013 年 4 月 17 日星期三15:17select 語法:select查詢選項查詢表達式(字段表達式)from子句where子句group by子句having子句orderby子句limit子句3 rows in setknysql lectnane* fron tbl4;characteset gbk collate gbkb泊3 row in set字節比較lnRrth斤Ft:要求,子句可以不出現。 如果出現,要求必須按照順序書寫。select notfO;! now! 2013-04-17 15:23:42select now, uinix_tim
21、estampC + 100;! noifO: un ix_t imestampO + 100 + - - 4 - +:2013-04-17 15:24:41 :1366183581 :1 row in set 列子句:如果是從表中獲得數據,那么字段,就是變量,可以參與任何運算:select ii+20, concatt_nane 一,gender?, c_nane from teac)ier_class;_I id SBi coricat 七30怡f, endei- !- select * fron teachei*_class,num_3;表名也是一個列表:如果沒有任何條件的兩個表名, 會得
22、到 表1乘表2內的所有數據。交叉連接,笛卡爾積nysql select nou( from dual;! 2013-04-17 15:49:30 11 row in s七七From可以省略。但是有些服務器是不允許省略,因此mysql支持,使用dual作為虛擬表存在:mysql 都支持哪些操作符(運算符):關系運算符:邏輯運算符:關系運算符:普通(常用):= = select null is not nu.ll, null is null;+- +- +I null is not null ! null is null !0;1row in set 判斷某個值,是否為 null:Is null
23、is not n ullIsnull()結構可以可以判斷null值。功能與=一致,特別的功能在于可以比較null值。hys( (il select null null, 10 null;- L- - 1-+:null null ! 10 null :H-+-I1 !0 IH- -1 - - +1 rou In set Between andBetwee n valueA and valueB范圍比較,閉區間。valueA= expr select from teachep_class whepe id in ; id i t_name I gendei* ! c_name ! room I d
24、ays begin_date !;3I韓信;nale! php0331 ! 102:22 : 2013-03-3:5I李百:nale! php0228 : 204:22 : 2013-03-3+-+- -+- +-+-+-+Interval獲得一個集合元素的索引:Interval(值,元素1, 元素2, 元素N);依次判斷值,與元素之間的大小關系,如果值,小于元素 如果值小于元素2則返回1,依次類推。mysql se lect t_name, da vs . interuaKdas 10, 23,30 ron t intevuaKdavs10, 20, 30= 1;meroon gender
25、1 c_jiane+-+!韓信 :nale I maleI malei Id i t_naine:! 102! php0115 I 207I phpB228 I 204i liegin_date+!221I20I22! 2013-03-3 !2013-62-2I 2013-03-3- - 1,則返回0;1 1rous in set 子信非iuJTi i 5 58 8邏輯運算符:And &Or |Not !Xor別忘了這個null值運算的特殊性:具體規則:邏輯運算符:非:not !,非 null 為 null。與: and &,有 0 就是 0,都是非零為 1,存在 null 與
26、非零則為 null或: or | , null|null=null null|1=1 null|0=null異或: xor , 有 null ,就是 null 。運算符也有優先級:可以使用括號來更改。建議使用:Group by2013 年 4 月 17 日星期三17:01分組聚合查詢語句:通過列內,不同的值,完成數據的統計:分組的目錄,通常是組內統計,統計是通過mysql的統計函數(聚合函數)完成的Sum()計算所有表達式的和。所有教師的代課天數:select t_n ame, sum(days) from teacher_class where 1 group by t_n ame;所有的班
27、級的上課天數:select c_n ame, sum(days) as sum_days from teacher_class where 1 group by c_n ame;mysql select t_name,fron teachei*_class uhei*e 1 gi4- +- +! t_name ! sum !42 :61;15 I注意:如果合計函數使用時,沒有與groupby配合,統計所有的數據,將所有的數據當作一組。sql select sum from teacher_class where 1;i sun:118井序group by會迪過排呼宇設,為僉踞世;亍亙新排爭掛字
28、默認是升洋3,可以在便冃Brophy時修改Isql sc1C-Gt t_nnc 5.undv5frora tcftchcrc ls-3 hcrc 1grt9up by t _nmc sc i子白信非李黑grgiup hud?5:C QBJ忤- *- !fI: suR sc let t t_n事smi frtiini tchrr_ las:? where 13 rows in set (B.00 s#ctGroup by 多字段分組select t_n ame,c_ name, sum(days) from teacher_class where 1 group by t_n ame, c_n
29、ame;類似多字段主鍵,使用組合的字段進行標識Rollup在使用多字段分組時,常常需要做上級統計:select t_n ame,c_ name, sum(days) from teacher_class where 1 group by t_n ame, c_n ame with rollup使用with rollup,可以相當于利用組合條進行統計后,再使用上一條件再次統計一次。ysql select t_name,c_nan, suii frow teacher_class where 1 grroup by tjia ,c_name with rollup;注意,會統計到沒有分組的情況,整
30、個都是一組的情況Fiy3ql aelgct屯jnaw #G* amRiron七cac he rlot a whertr 1( (B. CJRAnR :;c_name!sumd子子子白白白信信信信韭4LLNuphp0115_ V_tinpj|JtJZ.ONULL! php0228!b.ffi叮 尸 ri_r v v,-a-! NULL I* plipA11 E1482S :J_ EEI47!18 !oo 71 !1S !15 !30 ! c_n4ine i sun *4-+-+Ipbp011& I四:! plpW22fl !22:ipFpSllS:31:iplipe229:18:iphpe331:22:I plipeil I15 *:plinfllll IIS :lv屮-B!7 rows in“匕meA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論