數(shù)據(jù)庫的建立和操作
單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,*,第3章 數(shù)據(jù)庫的建立和操作,zpz:,,本片中,凡是,SQL,的語句,可選講,,內(nèi)容,介紹數(shù)據(jù)庫、數(shù)據(jù)表的基本概念,,數(shù)據(jù)庫和數(shù)據(jù)表的建立,,編輯表中的數(shù)據(jù)、記錄修改與刪除,,表的索引等有關操作。,,概念,數(shù)據(jù)庫(.,dbc,),,就是一個關于某一特定主題或目標的信息集合。,,表(.,dbf),,基本單位,是數(shù)據(jù)庫的基礎,,可以說表是關系數(shù)據(jù)庫系統(tǒng)中的基本結構。,,要存數(shù)據(jù),為所需記錄的信息創(chuàng)建一個表。,,由行和列組成的,一行為一個記錄,一列為一個字段。,,一行為一個記錄(,Record),一列為一個字段,(,Field),通常所說的表格,,二維表簡稱表(,Table),特征:,(1)若干記錄,,(2)若干個字段,每記錄具有相同結構的字段,,(3)不同類型的字段來存儲不同類型的數(shù)據(jù),,(4)字段的順序與存儲的數(shù)據(jù)無關,,(5)記錄在的順序與存儲的數(shù)據(jù)無關。,,表的兩,要素:,,表結構(列),,相應記錄(行),,表結構,,表的字段,表是由記錄組成,,記錄又由字段組成,,,字段的屬性(表結構),,字段名,,字段類型,,字段寬度,,小數(shù)位數(shù),,1.字段名,約定:,,只能使用字母、漢字、下劃線和數(shù)字,,見名知義,,,> < = + / \ | [ ] : ? 空格,,字段名必須以字母或漢字開頭,并且長度不能超過128個字符,,如:下列那些合法,,不以數(shù)字開頭,×,3,mn,姓名1,,mn3,,,不能含有空格;,×,,m n,×,編 號,,不能含有各種運算符;,×,,S-N,S_N,,×,AI*X,,,,,2.字段類型,不同類型的字段來存儲不同類型的數(shù)據(jù),字符型,貨幣型,數(shù)值型,浮點型,日期型,日期時間型,雙精度,整型,邏輯型,備注型,通用型,,,(1)字符型(,Character),,通常用于存儲鍵盤輸入的文本數(shù)據(jù)。,,漢字、字母、數(shù)字、空格、,,符號及標點符號,,字符型數(shù)據(jù)必用雙引號或單引號或[]來定界,,字符型字段的寬度最大為254 *****,,如:,,“,how” ‘1234’ [,中國人],,zpz:,,內(nèi)存變量,,(2)貨幣型(,Currency),,保存貨幣數(shù)值時,用貨幣類型而不是數(shù)值類型字段,,,最多保留4位小數(shù)位數(shù),多則四舍五入至4位,,,內(nèi)存變量用$數(shù)值來賦初值,,如:,x=$999,,? Type(,‘,x,’,),zpz:,,內(nèi)存變量,,(3)數(shù)值型(,Numeric),,數(shù)值型字段用來存儲數(shù)值數(shù)據(jù)。,,它可以包含數(shù)字0~9,也可以帶正、負號或小數(shù)點,,如:1234 100.89,,(4)浮點型(,Float),,浮點型字段在功能上等價于數(shù)值型字段。,zpz:,,內(nèi)存變量,N,,(5)日期型(,Date),,用于存儲包含有年、月、日的日期數(shù)據(jù),,長度為8字節(jié),,(6)日期時間型(,DateTime,),,用于存儲包含有年、月、日、時、分、秒的日期和時間數(shù)據(jù)。,,(7)雙精度型(,Double),,雙精度型用于存儲精度要求較高、位數(shù)固定的數(shù)值,或真正的浮點數(shù)值。,zpz:,,內(nèi)存變量,5.6,,(8)備注型,(,Memo),,長度固定為4字節(jié),,用于存儲不定長度的文本數(shù)據(jù),,當文本數(shù)據(jù)長度可能大于254,無法使用字符型存儲時,使用備注類型字段,,所有備注型字段的實際內(nèi)容存儲在和表名相同,擴展名為.,FPT,的備注文件中,,(9)通用型(,General),,通用型用于存儲,OLE,對象數(shù)據(jù),,字段寬度固定為4個字節(jié),用于存儲一個4個字節(jié)的指針,指向該字段的實際內(nèi)容,,其內(nèi)容存儲在擴展名為.,FPT,的文件中。,,OLE,對象包括,電子表格,、,字處理文檔,、,圖像,或其他多媒體對象等,,OLE,對象可以用鏈接方式存儲在表中。,,存儲數(shù)據(jù)的大小,取決于相的,OLE,服務程序,和磁盤空間大小的限制。,,(10)整型(,Integer),,整型用于存儲,整數(shù),數(shù)據(jù),,字段寬度固定為4個字節(jié)。,,取值范圍從-2 147 483 647 到2 147 483 646。,,(11)邏輯型(,Logical),,.T.,或.,Y.,為邏輯真,,.,F.,或.,N.,為邏輯假,,長度固定為1字節(jié),,(12)字符型(二進)((,Character(Binary)),,字符型(二進制)用于存儲不需要系統(tǒng)代碼頁維護的字符數(shù)據(jù),,其他字段特性同字符型字段,,密碼,(各國),,(13)備注型(二進制)((,Memo(Binary)),,備注型(二進制)用于存儲不需要系統(tǒng)代碼頁維護的備注字段數(shù)據(jù)。其他字段特性同備注型字段。,,數(shù)據(jù)類型(結),,數(shù)據(jù)類型(,Type)13,種,,,C-,字符型,,N-,數(shù)值形,,F-,浮點型,,,D-,日期型,,I-,整 型,L-,邏輯型,,,M-,備注型,G-,通用型,Y,貨幣型,,3.字段寬度,規(guī)定寬度,,字符型字段 254,,貨幣型字段 8,,數(shù)值型字段 20,,日期型字段 8,,備注型 4,,邏輯型,1,,日期時間型 8,,通用型字段 4,,用于存儲一個4個字節(jié)的指針,指向該字段的實際內(nèi)容。整型字段寬度固定為4個字節(jié)。,,寬度(,Width) (,結),,(,以下類型寬度固定),,貨幣型、日期型、日期時間型、雙精度型:8字節(jié),,整型、備注型、備注型(二進制)、通用型:4字節(jié),,邏輯型:1字節(jié),,,4.小數(shù)位數(shù),,有小數(shù)的字段:,,數(shù)值型,,浮點型,,雙精度型,,字段寬度 = 整數(shù)部分寬度 +,小數(shù)點1位,+小數(shù)位寬度,,如小數(shù)位數(shù)不為0,則小數(shù)位數(shù)至少要比整個字段寬度小2,,小數(shù)位數(shù),一個,N,形變量寬為6,小數(shù)位數(shù)為3,則這個變量最大可表示的數(shù)為多少?,,,_ _ . _ _ _,,99.999,,,5.,空值,(,NULL),空值是用來標識一個字段“沒有值”的標志,,空值表示沒有任何值或沒有確定值,,空值不等同于數(shù)值0、空字符串或邏輯“假”,,函數(shù),EMPTY(),測試空值,,如果允許字段接受,NULL,值,則應選中該欄所在框,,表的關鍵字段不允許為,NULL,值,,字段類型 中文名稱 寬度(字節(jié)) 說明,,,Character,字符型 254 字母、漢字、數(shù)字、文本、符號,,Currency,貨幣型 8 貨幣單位,,Numeric,數(shù)值型 20 整數(shù)或小數(shù),,Float,浮點型 20 同數(shù)值型,,Date,日期型 8 年、月、日,,DateTime,日期時間型8 年、月、日、時、分、秒,,Double,雙精度型 8 雙精度數(shù)值,,Integer,整型 4 整數(shù),,Logical,邏輯型 1 真或假,,Memo,備注型 4 不定長的字母、文本、數(shù)字,,General,通用型 4,,OLE,圖像、多媒體對象,,小結,,數(shù)據(jù)庫是表和表間關系的集合,,表是由表結構和記錄組成,,表結構是由各不同字段構成,,每一字段又具有字段名、數(shù)據(jù)類型、數(shù)據(jù)寬度、小數(shù)位數(shù)等屬性,,表中的每一個記錄又具有相同的字段,,,建表的步驟:,,1)設計表結構,,2),建表的結構,creat,表名,,3),保存表文件,ctrl+w,,4)輸入記錄,append browse,,,表結構的創(chuàng)建,1、表設計器,,(1),打開,“,表設計器,”,,項目管理器/自由表/新建/新表/保存,,注:,,,A、,也可從菜單或工具欄中直接新建表,,,B、,與在,“,項目管理器,”,中新建表不同的是: 這樣新建的表將不包含在項目中,,(2),在,“,表設計器,”,中創(chuàng)建表結構,,表設計器/字段/輸入/確定,,表結構的創(chuàng)建,2、用,create table -SQL,命令創(chuàng)建表結構,,create table |DBF,表文件名(字段名1 字段類型[(字段寬度[,小數(shù)位數(shù)])];[,字段名2 字段類型[(字段寬度[,小數(shù)位數(shù)])]]…)----編程時用,,例:學生表結構,,create table xs2(,xh,c(6),,xm,c(8),,xb,c(2),,zydh,c(6)),,教師表結構,,create table,js,(,xm,c(8),,xb,c(2),,gl,n(2,0),,csrq,d,,jbgz,n(7,2),,jl,m),,3、使用,Null,值,,表設計器/字段,,create table,中,NULL,NOT NULL,子句,,例:,,create table books(,sh,c(6) not null,,sm,c(40) not null,,cbrq,d null),,,set null on,,數(shù)據(jù)表的建立,如:,,一張名為教師檔案文件,zgda,.dbf,,,編號 姓名 性別 年齡 職稱 工作時間 婚否 簡歷,,1 張黎黎 女 26 助教 05/24/83,T memo,,2,李 艷 女 30 助教 09/14/90,T memo,,3,劉 強 男 38 講師 12/24/76,,T memo,,,職工檔案表結構(,zgda,.dbf),字段名 類型 寬度 小數(shù)位數(shù) 索引,NULL,,編號 字符型 4 無 升序 否,,姓名 字符型 6 無 無 否,,性別 字符型 2 無 無 否,,年齡 數(shù)值型 2 無 無 否,,職稱 字符型 8 無 無 可,,工時 日期型 8 無 無 否,,婚否 邏輯型 1 無 無 否,,簡歷 備注型 4 無 無 可,,照片 通用型 4 無 無 可,,表的打開,VFP,在使用一個表前必須把表打開,,打開命令,,USE <,文件名>,,VFP,在結束使用一個表時,必須把表關閉,,關閉命令,,USE,,CLOSE ALL,,CLOSE DATABASE/TABLE,,修改表結構,,1、表設計器,,項目管理器/選定表/修改,,2、命令,,USE books,,MODIFY STRUCTURE,,修改表結構,2、命令,,ALTER TABLE-SQL,命令,,添加字段:,ADD [ COLUMN ],子句,,例:,ALTER TABLE books ADD COLUMN,折扣,n(4,2),,重命名字段:,RENAME COLUMN,子句,,例:,ALTER TABLE books RENAME COLUMN,折扣,TO,zk,,刪除字段:,DROP [ COLUMN ],子句,,例:,ALTER TABLE books DROP COLUMN,zk,,3、菜單/按鈕方式,,法1:,,“表”,—,“,屬性,”,,“,工作區(qū),”,,“,工作區(qū)屬性,”,—,“,修改,”,,,法2:,,“,窗口,”,—,“,數(shù)據(jù)工作期,”,,,(,“,屬性,”,—,“,修改,”,),,記錄的處理,記錄的追加,,1、立即輸入記錄(瀏覽/編輯/追加方式),,2、,瀏覽窗口下追加(,USE/BROWSE)(,表/追加新記錄),,3、使用,INSERT - SQL,命令,追加,記錄,,insert into,zgda,(,姓名,性別,年齡),values (',洪七公','男',900),,4,、,從其他表中追加記錄,,命令,APPEND,,APPEND FROM,,APPEND [ BLANK ],,記錄的瀏覽,,1、瀏覽窗口,,進入 :,,BROWSE,命令,,use books/,顯示/瀏覽,,項目管理器/選定某個表/單擊,“,瀏覽,”,按鈕,,2、命令,,BROWSE,,LIST / DISPLAY,,BROWSE,,FIELDS,書號,書名,作者,,for ...,,如何定制瀏覽窗口?,重新安排列的位置:,,拖動,,改變列的寬度:,,拖動,,顯示或隱藏表格線:,,顯示/網(wǎng)格線,,分為兩個窗格:,,左下角拖動,,6.3.3 記錄的定位,記錄結束標志,記錄開始標志,第,n,條記錄,文件頭,Go top,,go bottom,,skip,1、記錄指針標志,,記錄號(輸入順序),,記錄的開始標志,,,BOF ( ),,記錄指針標志,,( 當前記錄 ),,,,,RECNO ( ),,記錄的結束標志,,,EOF ( ),,2、,記錄的定位方式,,絕對定位,go,,相對定位,skip,,條件定位,,幾個概念,記錄指針,,當前記錄,,記錄定位,,記錄號,RECNO(),,例1,假設,ZGDA,表有848條記錄,先后執(zhí)行以下命令,,,,,bof,(),,,,eof(),,,recno,(),,use books f f 1,,skip -1,,t f 1,,skip -1 Error f 1,,go,bott,f f 848,,skip,,f t 849,,skip,,Error,,,例2,,RECN(),,Use books 1,,go 5,,5,,skip +2 7,,skip -3 4,,locate for …,,,3、記錄定位的實現(xiàn),,界面方式 (,“,表,”,—,“,轉到記錄,”,),,記錄號:絕對定位,goto,,定位:條件定位,locate for,,作用范圍:,all,next,record,rest,for,,找到/未找到,,命令方式,,,絕對定位:,GO( GOTO ),,,,GO( GOTO ) TOP/BOTTOM,,,相對定位,:,SKIP(,與索引有關),skip=skip 1,,,快速移動:,SEEK,,及,FIND,,記錄的修改,1、在瀏覽窗口中修改,,EDIT / CHANGE / BROWSE,,項目管理器/瀏覽,,例:修改,books,表中第5條記錄,,,use books,,edit record 5,,記錄的修改,2、批量記錄的修改,,(1)界面方式,,“表”—“替換字段”—字段條件,,(2)命令方式,,UPDATE-SQL,命令(表不必事先打開,以下同),,REPLACE,,命令,,USE books,,copy to temp,,use temp,,REPLACE,單價,,WITH 5.00 FOR,單價,<5,,記錄的刪除,目的:,,節(jié)省時空,,刪除步驟:,,邏輯刪除,,物理刪除,,,邏輯刪除,給要刪除的記錄加標記(*號),,標記要刪除的記錄(邏輯刪除),,瀏覽窗口:,,單擊小方框,,“,表,”,,“,刪除記錄,”,,命令,DELETE FROM,表名[,WHERE,過濾條件表達式],,例:,,刪除教材表中庫存在數(shù)量為0的記錄,,delete from books where,庫存數(shù)量=0,,物理刪除,徹底刪除(物理刪除),,“,表,”,,“,徹底刪除,”,,命令,PACK(,獨占),,刪除有刪除標記的記錄,,命令,ZAP=delete,all,+pack(,獨占),,恢復,記錄的刪除,恢復帶刪除標記的記錄(與,set dele,無關),,,法1:,,小方框 黑-->白,,法2:,“,表,”,,“,恢復記錄,”,,法3:,RECALL [,范圍][,FOR,條件表達式1][,WHERE,條件表達式2],,例:,recall,,recall all,,recall all for,庫存數(shù)量=0(這里的,all,可?。?,說明:,缺省范圍(當前記錄,不是全部記錄),,記錄的刪除,對帶刪除標記記錄的訪問,,(1)測試記錄的刪除標記,deleted(),,有刪除標記返回為真,否為假,,(2),控制對帶刪除標記記錄的訪問,,set deleted on/off,,說明:,,有些默認為,ON,,有些默認為,OFF,,實驗:,,先刪除若干記錄(邏輯刪除),,LIST,,默認為,OFF,,SET DELETED ON,,LIST,,set deleted on/off,為,set deleted on,時,,屏蔽掉有標記的記錄,不能訪問,,影響,Count,命令,,不影響,Reccount,(),,例:8個記錄,一個有刪除標記,,Set deleted on,,Count to x,,? X,,7,,?,Reccount,() 8,,篩選記錄,界面,,,“表”,—,“,屬性,”,—,“,數(shù)據(jù)過濾器,”,,命令,,SET FILTER TO <,條件表達式>,,SET FILTER TO,,FOR,子句:臨時性記錄篩選,,例:,USE ZGDA,,SET FILT TO,出版社=‘石油大學’,,注意:,,是隱藏而非刪除,,與,FOR,子句不同,,對,SE LECT-SQL、 DELETE-SQL、UPDATE-SQL,無效,,篩選字段,表/屬性/字段篩選,,SET FIELDS TO <,字段1,>,[, <字段2,>],,SET fields to,姓名,性別,,表的使用,工作區(qū):,,用以標識一張打開的表的內(nèi)存區(qū)域,,一個工作區(qū)在某一時刻只能打開一張表,,一張表可以在多個工作區(qū)同時打開,,(,use,表,again),,共有255個工作區(qū),,默認工作區(qū)號為1區(qū),,USE books(,默認為1號),,LIST,,USE books1(books,自動關閉),,LIST,,工作區(qū)的標識***,用,數(shù)字來標識各個工作區(qū)(1—255),,用相應工作區(qū)中表名來標識工作區(qū),,(此時表沒有指定別名,如指定別名,用別名來標識工作區(qū),),,Sele,5,,Use,zgda,,Sele,4,,Sele zgda,,1-10,個工作區(qū)常用英文字母,A-J,,Sele,10=,sele,j,,工作區(qū)的轉換,命令:,,Select,工作區(qū)號/工作區(qū)中表別名/,A-J,,如:,,Sele,1,,Use,zgda,,Sele,B,,Selct zgda,,Select 0,表示選擇未用的號最小工作區(qū),,Select O,例子,sele,1,,use,zgda,,sele,4,,use,zggz,,sele,0,,? select(),,,返回選擇的工作區(qū)號,The answer is :2,,表的使用,可以同時在多個工作區(qū)中打開多個沒有打開的表,,SELE 1,,USE books1,,LIST,,SELE 2,,USE books2,,LIST,,SELE 1,,LIST,,一張表不可以在多個工作區(qū)同時打開,,表的使用,表的別名指定,,,USE <,表文件名 >,ALIAS,,<,別名 >,,例:,USE ZGDA ALIAS OK,,當前工作區(qū):,正在使用的工作區(qū),,ALIAS ( ),及,SELECT ( ),函數(shù),,SELE(0):,測試當前工作區(qū)的區(qū)號,,ALIAS():,測試當前工作區(qū)中表的別名,,“,數(shù)據(jù)工作期,”,窗口,,別名,,操作非當前工作區(qū)中的表,,把其它的工作區(qū)選為當前工作區(qū),,Sele,2,,在命令中強行指定工作區(qū),,GO TOP IN ok,,關于表的打開和關閉,剛創(chuàng)建的表處于打開狀態(tài)*,,1、表的打開,,界面,,文件,/,打開,,窗口/數(shù)據(jù)工作期/打開,,USE ?,,命令,,USE <,表文件名>,,USE <,表文件名>,IN 0,,多次打開同一張表(同時),,USE <,表文件名>,AGAIN,,例:,USE books/SELE 0/USE XS AGAIN,,2、表的關閉,,界面,,窗口/數(shù)據(jù)工作期/關閉,,命令,,USE,,USE IN <,別名/工作區(qū)>,,CLOSE ALL&&,數(shù)據(jù)庫、索引、項目管理器等也被關閉,,CLOSE DATABASES &&,如果當前沒有打開的數(shù)據(jù)庫,則把自由表全部關閉,,CLOSE TABLES &&,關閉表,不關閉庫,,退出,VFP,,注意:,SQL,語句能自動打開表,但不會自動關閉表,!,,表的獨占與共享使用,表的共享使用:,,一張表可以同時被多個用戶打開,,(,RECORD UNLOCKED),,表的獨占使用:,,一張表只能被一個用戶打開(默認),,(,EXCLUSIVE),,表的獨占與共享使用,設置獨占與共享打開表的默認狀態(tài),,工具/選項/數(shù)據(jù),,SET EXCLUSIVE OFF/ON(,共享/獨占),,強行用獨占方式打開表,,“打開”—“獨占”復選框,,USE <,工作表 >,SHARED/EXCLUSIVE,,設置改變,并不改變已經(jīng)打開的表的狀態(tài),,一張表同時被多次打開時,只以第一次的打開方式為準(窗口/數(shù)據(jù)工作期),,利用緩沖訪問表中的數(shù)據(jù),1、數(shù)據(jù)緩沖,,在多用戶環(huán)境下,用以保護對表記錄所做的數(shù)據(jù)更新以及數(shù)據(jù)維護操作的一種技術,,2、類型,,(1)記錄緩沖(行緩沖):一次訪問、修改、寫一個記錄,,(2)表緩沖:對多個記錄緩沖更新,,兩種鎖定方式:,,(1)保守式緩沖:在多用戶環(huán)境中,防止一個用戶訪問(讀/寫)另一個用戶正在修改的記錄或表,,(2)開放式緩沖:記錄只在被,寫入,時加鎖,,表的數(shù)據(jù)緩沖,表的數(shù)據(jù)緩沖,,保守式行緩沖,,開放式行緩沖,,保守式表緩沖,,開放式表緩沖,,不設置緩沖,,設置表的數(shù)據(jù)緩沖,3、設置表的數(shù)據(jù)緩沖,,(1)界面,,窗口/數(shù)據(jù)工作期/屬性/,,選中,“,允許數(shù)據(jù)緩沖,”,,,“,鎖定記錄,”,,,“,緩沖,”,,“在編輯時”(保守式)“在寫入時”(開放式),,“當前記錄”(記錄緩沖)“所有編輯過的記錄”(表緩沖),,設置表的數(shù)據(jù)緩沖,(2),CURSORSETPROP(),,格式:,,,CURSORSETPROP(’Buffering’,,緩沖類型值,[工作區(qū)|別名],),,緩沖類型值,,1無緩沖(默認),,2保守式行緩沖,,3開放式行緩沖,,4保守式表緩沖,,5開放式表緩沖,,例:為,XS,表打開開放式表緩沖:,,SET MULTILOCKS ON(,除方式1外),,USE XS,,= CURSORSETPROP( ’Buffering’, 5),,利用緩沖訪問表中的數(shù)據(jù),4、檢測緩沖區(qū)中的數(shù)據(jù)是否與數(shù)據(jù)源表一致,,(1),CURVAL(),和,OLDVAL(),,CURVAL():,返回當前值,,OLDVAL():,返回初始值,,(2),GETFLDSTATE(),,5、,執(zhí)行和放棄對緩沖數(shù)據(jù)的更改,,(1),TABLEUPDATE(),執(zhí)行對緩沖行、緩沖表或臨時表的修改,,格式:,TABLEUPDATE([,AllRows,][,,lForce,][,,別名|工作區(qū)],),,(2),TABLEREVERT(),放棄對緩沖行、緩沖表或臨時表的修改,,格式,:,TABLEREVERT([,AllRows,][,,工作區(qū)|別名],),zpz:,,此,頁不,講,,概念,物理順序:,,一般是按照其輸入的順序進行,記錄的存儲順序,,順序找,速度慢,,不便于查找需要的信息,,邏輯順序:,,記錄的處理順序,,(快速),,可以使用索引來改變記錄的順序即邏輯順序,,根據(jù)表中字段的值,建立具有邏輯順序的索引文件,然后根據(jù)索引文件重新排列數(shù)據(jù)庫表中顯示的記錄。,,索引文件,1、索引:,,如同目錄,,數(shù)據(jù)庫的輔助文件,不能單獨使用,,可以按一個字段索引,也可以多個,,一個表可以創(chuàng)建多個索引,,索引存儲在索引文件中,,索引文件中存儲著記錄號和索引字段的,索引值,,理解索引,索引可以理解為根據(jù)某一字段的值進行邏輯排序的一組指針,,,按照索引顯示記錄,,VFP,按照指針排列的順序分別讀取每一條記錄,而這些記錄在數(shù)據(jù)庫中的實際存儲位置并未改變。,,按年齡索引后的表文件,,姓名 年齡,,張黎黎 26,,,李 艷 30,,,劉 強 38,,,DA.DBF,姓名 年齡,,劉 強 38,,李 艷 30,,張黎黎 26,,DA.DBF,,物理順序,邏輯順序,記錄號 年齡大小,,3 1,,2 2,,1 3,,,NL.CDX,,關鍵字與,索引標識,(1),索引關鍵字,(,Index Key),,建立索引的依據(jù)(索引表達式),,字段/字段表達式,,VFP,使用索引關鍵字來顯示和訪問表中的記錄,,(2)索引標識(,Tag),,索引關鍵字的名稱(索引名),,<=10字節(jié),,索引的類型,4種類型索引(根據(jù)關鍵字段),,主索引,,候選索引,,普通索引,,惟一索引,,表的索引,2、索引的類型,,主索引(,Primary,indexs,),,在數(shù)據(jù)庫表中,每張表只能創(chuàng)建一個主索引,,組成主索引關鍵字的字段或表達式,在表的所有記錄中不能有重復的值(學號可以,姓名不可以),,自由表不能建立主索引,,主索引存儲于數(shù)據(jù)庫表的結構復合索引中,,侯選索引(,Candidate,indexs,),,在指定的關鍵字段或表達式中不允許有重復值的索引,,一張表中可以建立多個侯選索引,,侯選索引可用于數(shù)據(jù)庫表和自由表,,表的索引,2、索引的類型,,普通索引(,Regular,indexs,),,可以決定記錄的處理順序,,允許關鍵字段或表達式的值出現(xiàn)重復,,對一張表可以創(chuàng)建多個普通索引(,GL),,唯一索引,(,Unique,indexs,),,允許有重復值,,具有重復值的記錄僅存儲其中的第一個(出版社),,惟一:對每一個特定的關鍵字只存儲一次,而忽略了重復值第二次或以后的記錄,,表的索引,3、索引文件的種類,,索引本身并不改變表中數(shù)據(jù)的物理順序,,結構復合索引,(,CDX),,與數(shù)據(jù)表同名,,文件名是在創(chuàng)建時由系統(tǒng)自動給定,,結構復合索引文件與表文件同步打開、更新、關閉,,是表的一部分,,非結構復合索引,(,CDX),,文件名由用戶給出,,非結構復合索引文件中不能創(chuàng)建主索引,,獨立索引,(,IDX):,與,FoxBase,兼容,,創(chuàng)建索引文件,表設計器,,“,表設計器,”,——,“,索引,”,選項卡,,Index,命令,,INDEX ON <,索引表達式>,,TAG <,索引標識名>,,[,FOR <,條件表達式>,ASCENDING|DESCENDING],,[UNIQUE|CANDIDATE,](,允許相同|不允許相同),,注意,,不能對備注字段和通用字段建立索引,,不要建立無用的索引,,析,Index,命令,?結構復合索引,(,CDX),,?,非結構復合索引,(,CDX),,?,獨立索引,(,IDX),INDEX ON <,索引表達式>,TAG <,索引標識名>,,[,FOR <,條件表達式>,ASCENDING|DESCENDING],,[UNIQUE|CANDIDATE,](,允許相同|不允許相同),,索引的建立,步驟:,,項目管理器---表---修改,,表設計器---索引,,輸入索引名----類型---表達式,,,不要對每個字段都建立索引,否則會降低程序的運行效率,,對多個字段,索引,操作步驟:,,項目管理器--選擇已索引的表,選,“,修改,”,,表設計器,選索引,輸入索引的名稱,,在,“,表達式,”,框中,輸入對多個索引的表達式,,如:按性別與年齡進行索引,其表達式應為,性別+,STR(,年齡,2),,確定,,可以對多個字段建立索引,,其排序是按照表達式的值進行的,,,索引的修改和刪除,索引的修改,,表設計器,,“,表設計器,”,——,“,索引,”,選項卡,,命令,,INDEX,命令修改原索引,,索引的刪除,,表設計器,,“,表設計器,”,——,“,索引,”,選項卡,,DELETE TAG,刪除索引標識,,索引的使用,設置主控索引,,主控索引:決定顯示或訪問表中記錄的順序的索引,,主控索引可以是:,,復合索引文件中的一個標識(主控標識),,一個獨立索引文件(主控索引文件),,打開表的同時指定主控索引,,Use,表名,index,索引文件名,,打開后再設置主控索引,,窗口 /數(shù)據(jù)工作期 /屬性/索引順序,,命令,SET ORDER TO TAG <,標識名>,,取消主控索引,,SET ORDER TO,,索引函數(shù),,CDX() ORDER() TAG(),,索引的使用,利用索引快速定位記錄,,SEEK,命令,,SEEK,命令只能在索引過的表中使用,并且只能搜索索引關鍵字(,XS/960102),,EOF(),與,FOUND(),,SEEK,函數(shù)(=,SEEK+FOUND()),da:,,此頁不講,,篩選記錄(,set filter to),操作步驟:,,項目管理器--選擇已索引的表,選,“,修改,”,,表設計器,選索引,輸入索引的名稱,,在,“,篩選,”,處,輸入過濾表達式,,按,“,確定,”,,完成篩選表達式的建立,,如:篩選性別為男的記錄,表達式為,,Set filter to,性別=,‘,男,’,,可以實現(xiàn)對記錄的控制,,,4 4 王秋燕 女 45講師 10/09/70,T memo,gen,,5 5,姜麗萍 女 45講師 10/09/70,T memo,gen,,6 6,陳麗麗 女 38講師 09/27/72,T memo,gen,,7 7,劉 剛 男 50副教授 06/23/61,T memo,gen,,8 8,王 良 男 39講師 08/09/78,T memo,gen,,習,題,1.在創(chuàng)建表之前需要做好哪些準備工作?,,2.過濾器有什么作用?怎樣設置過濾器的過濾字段?,,3.,VFP,中的索引有哪幾種?索引的使用應該遵守哪幾條原則?,,4.建立一個,“,職工檔案,”,表,參考本章例題。建立一個,“,工資,”,表,表的內(nèi)容自己定。,,5.建立一個,“,學生成績,”,表,表的內(nèi)容自己定。,,習 題,6.將,“,職工檔案,”,表,復制一個新文件,先添加幾個記錄,進行修改和刪除操作。,,(1)用,“,瀏覽,”,或,“,編輯,”,進行表的修改操作。,,(2)給前3個記錄做刪除標記,然后再恢復操作。,,(3)將職稱是,“,助教,”,的記錄做刪除標記,然后再徹底刪除。,,習 題,7.用過濾器,篩選記錄,將,“,職工檔案,”,表進行如下操作:,,(1)瀏覽前4個記錄,只列出姓名、性別和工資三個字段的內(nèi)容。,,(2)瀏覽男的全部記錄的內(nèi)容。,,(3)瀏覽職稱是,“,講師,”,并且性別是男的記錄的內(nèi)容。,,習 題,8.將,“,職工檔案,”,表,按下列要求建立索引文件:,,(1)按職稱建立索引文件。,,(2)按年齡建立索引文件。,,理 解,,數(shù)據(jù)庫提供一個環(huán)境,,文件名,DBC,,由多表及其關系組成,,表,提供記錄信息,,文件名,DBF,,可不放數(shù)據(jù)庫中,自由表,數(shù)據(jù)庫,數(shù)據(jù)表,,索引應遵循原則,(1)為了提高速度,用普通索引、候選索引或主索引,,,(2)控制字段的重復值對數(shù)據(jù)庫,“,表,”,用,“,主索引,”,或,“,候選索引,”,,對于,“,自由表,”,,用,“,候選索引,”,。,,