|
第三章 VFP數(shù)據(jù)庫(表)的概念及操作
3.1 VFP6.0表
1. 表的概念
表(數(shù)據(jù)表):
是指存放在磁盤文件中的一張二維表。(相當FoxPro 2.x 版本中的數(shù)據(jù)庫)
自由表:不屬于任何數(shù)據(jù)庫的表。
數(shù)據(jù)庫表:包含在一個數(shù)據(jù)庫中的表。
表文件名:
表名可以由字母、數(shù)字或下劃線組成,系統(tǒng)自動給出的擴展名為 .DBF。
備注文件名:
當表中有備注型或通用型字段時,系統(tǒng)自動生成與所屬數(shù)據(jù)表的表名相同、擴展名為:.FPT的文件名。
表結構:存儲表記錄的公共結構。(就是指一張表的表頭結構,即字段的屬性)。
記錄:表中的一行。它是多個字段的集合,同一張表的每個記錄都有相同的字段。
字段:表中的一列。它規(guī)定了數(shù)據(jù)的特征。
關系型數(shù)據(jù)表的特點:
(1)每一個字段不可再分解,也不能有名字相同的字段;
(2)每一列中的數(shù)據(jù)都有相同的數(shù)據(jù)類型;
(3)表中沒有內容完全相同的行(記錄)。
2. 字段的基本屬性
字段的屬性:
包括:字段名、數(shù)據(jù)類型、字段寬度、小數(shù)位數(shù)、空值支持
字段名:
即每個字段的名字,必須以字母開頭,可由字母、數(shù)字、下劃線組合而成,字母大、小寫無區(qū)別,但其中不許有空格或其它字符。自由表的字段名最多由10個字符組成,數(shù)據(jù)庫表的字段名支持長名,最多可達128個字符。如果從數(shù)據(jù)庫中移去一個表,那么此表的長字段名將被截短成 10 個字符。
VFP允許長字段名和長表名,但使用長名稱對于跨平臺的操作可能遇到難以預料的結果。
數(shù)據(jù)類型:指該字段的數(shù)據(jù)特征。
字段寬度:指該字段所能容納數(shù)據(jù)的的最大字節(jié)數(shù)。
小數(shù)位數(shù):指數(shù)值型數(shù)據(jù)將保留幾位小數(shù)。此時的字段寬度 = 整數(shù)位數(shù)+1+小數(shù)位數(shù)。
NULL 值(空值):
無明確的值。NULL 值不等同于零或空格。一個 NULL 值不能認為比某個值(包括另一個 NULL 值)大或小,相等或不同。
VFP 6.0表中字段的數(shù)據(jù)類型
|
字段類型
|
代號 |
說明
|
字段寬度
|
使用示例
|
| 字符型 |
C
|
字母、漢字和數(shù)字型文本 |
每個字符為1個字節(jié),最多可有 254 個字符 |
學生的學號或姓名, "8199101" 或 ‘李立‘ |
| 貨幣型 |
Y
|
貨幣單位 |
8 個字節(jié) |
工資, $1246.89 |
| 日期型 |
D
|
包含有年、月和日的數(shù)據(jù) |
8 個字節(jié) |
出生日期,
{02/25/2000}
|
| 日期時間型 |
T
|
包含有年、月、日、時、分、秒的數(shù)據(jù) |
8 個字節(jié) |
上班時間,
{02/25/2000 9:15:15 AM}
|
| 邏輯型 |
L
|
“真”或“假”的布爾值 |
1 個字節(jié) |
課程是否為必修課,
.T. 或 .F.
|
| 數(shù)值型 |
N
|
整數(shù)或小數(shù) |
在內存中占 8 個字節(jié);在表中占1 至20個字節(jié) |
考試成績, 83.5 |
| 雙精度型 |
B
|
雙精度浮點數(shù) |
8 個字節(jié) |
實驗要求的高精度數(shù)據(jù) |
| 浮點型 |
F
|
與數(shù)值型一樣 |
|
|
| 整型 |
I
|
不帶小數(shù)點的數(shù)值 |
4 個字節(jié) |
學生的數(shù)量 |
| 通用型 |
G
|
OLE 對象 |
在表中占 4 個字節(jié) |
圖片或聲音 |
| 備注型 |
M
|
不定長度的一段文字 |
在表中占 4 個字節(jié) |
學生簡歷 |
| 字符型(二進制) |
C
|
任意不經過代碼頁修改而維護的字符數(shù)據(jù) |
每個字符用1個字節(jié),最多可有 254 個字符 |
|
| 備注型(二進制) |
M
|
任意不經過代碼頁修改而維護的備注數(shù)據(jù) |
在表中占 4 個字節(jié) |
|
3. 表的基本操作
表的創(chuàng)建:設計表名和表結構、輸入記錄、建立索引
數(shù)據(jù)維護:增加記錄、修改記錄、刪除記錄
創(chuàng)建表的主要步驟: 設計表結構 → 輸入記錄 → 建立索引 → 數(shù)據(jù)維護
4.關于表操作的幾個基本命令
|
命令格式
|
功能
|
| CREATE 表文件名 |
創(chuàng)建一個新的自由表的結構 |
| USE 表文件名 |
打開指定的表文件 |
| USE |
關閉當前表文件 |
| LIST ALL |
顯示當前表的全部記錄內容(類似于DOS 命令中的dir) |
| DISPLAY ALL |
分屏式地顯示當前表的全部記錄內容(類似于DOS中的dir/p) |
| DISPLAY STRUCTURE |
顯示當前表的結構(分屏顯示) |
| LIST STRUCTURE |
顯示當前表的結構(不分屏顯示) |
| MODIFY STRUCTURE |
調出表設計器,修改當前表的結構。 |
| CLEAR |
清除主窗口中的所有內容 |
注意:
(1)必須先打開所需的數(shù)據(jù)表才可進行以上操作;
(2)當帶有命令子句時,只對指定的記錄進行操作;
(3)LIST 命令的默認范圍是所有記錄,DISPLAY 命令的默認范圍是當前記錄。
3.2 表結構的創(chuàng)建和修改
1. 表結構的創(chuàng)建
創(chuàng)建表結構其實就是設計字段的基本屬性??梢允褂帽碓O計器、表向導來創(chuàng)建表結構。
(1)使用表設計器創(chuàng)建表
步驟:
從文件菜單中單擊新建 → 在新建對話框中選擇表并單擊新文件 → 在創(chuàng)建對話框中給出文件名并確定所需的保存位置 → 在表設計器對話框中逐個輸入所需字段(用↓或鼠標換行),全部字段輸入完成后單擊確定。
(2)使用表向導創(chuàng)建表
步驟:
從文件菜單中單擊新建 → 在新建對話框中選擇表并單擊向導→在表向導中做第1步:選取字段,完成后單擊下一步 → 在表向導中做第1a步:選擇數(shù)據(jù)庫,完成后單擊下一步 → 在表向導中做第2步:修改字段設置,完成后單擊下一步 → 在表向導中做第3步:為表建索引,完成后單擊下一步 → 在表向導中做第4步:完成,選擇表的保存方法,完成后單擊完成 → 在另存為對話框中給出文件名并確定所需的保存位置。
注意:
先選擇一個與待建數(shù)據(jù)表類似的樣表,再從中挑選出所需的部分字段,然后在下一步根據(jù)實際需要修改或直接采用原字段的寬度。
2. 表結構的修改
USE <表文件名>
MODIFY STRUCTURE
3.3 表記錄的處理
1. 記錄的輸入
(1) 立即輸入方式:
設計好表的結構后,系統(tǒng)會提示是否直接進入數(shù)據(jù)輸入狀態(tài)。若選是,則進入編輯窗口,輸完后單擊“X”按鈕退出,系統(tǒng)自動存盤。需輸入備注型或通用型字段的數(shù)據(jù)時,雙擊“memo” 或“gen”,在新打開的編輯窗口中輸入所需內容,輸完后單擊“X”按鈕系統(tǒng)自動存盤,退回到原窗口 ,此時字段中的“memo” 或“gen”變成“Memo” 或“Gen”。
(2) 追加方式:
若設計好表的結構后并沒有及時輸入數(shù)據(jù),則可以用追加方式:
從文件菜單中(或從命令窗口中輸入:USE 表文件名) 打開所需表文件 → 從顯示菜單中選擇瀏覽 → 再從顯示菜單中選擇追加方式 → 在瀏覽窗口中輸入所需記錄。
不同追加方式適用的場合
|
追加記錄的方式
|
適用的場合
|
|
顯示菜單中的追加方式
|
在現(xiàn)有數(shù)據(jù)表的尾部添加一個或多個新記錄
|
|
表菜單中的追加新記錄
|
在現(xiàn)有數(shù)據(jù)表的尾部添加一個新記錄
|
|
表菜單中的追加記錄…
|
從其它數(shù)據(jù)表中將符合要求(字段名和字段類型相同)的記錄添加在當前數(shù)據(jù)表的尾部
|
|
APPEND [BLANK]
|
在當前表的末尾自動添加一個或多個新記錄。相當于顯示菜單中的追加方式。有BLANK時添加一個空記錄,相當于表菜單中的追加新記錄。
|
|
APPEND FROM 表文件名 [FIELDS 字段名1,字段名2 …][FOR 條件 ]
|
從其它數(shù)據(jù)表中將符合要求(字段名和字段類型相同)的記錄添加在當前數(shù)據(jù)表的尾部。相當于表菜單中的追加記錄…。
|
|
APPEND FROM 文本文件名 SDF
|
將符合要求的文本文件全部追加在當前數(shù)據(jù)表的尾部。 注意:文本內容要與表中的字段結構相適應。
|
|
文件菜單中的導入
|
將其它類型的文件轉換成一個完整的VFP數(shù)據(jù)表。
|
2. 記錄的瀏覽
(1) 通過瀏覽窗口
(2) 通過BROWSE 命令
BROWSE命令用來打開表的瀏覽窗口,可通過不同的子句來實現(xiàn)對特定記錄的瀏覽。
VFP命令中的常用子句
1) 范圍子句
|
子句格式
|
功能
|
|
ALL
|
表示對表文件的全部記錄進行操作
|
|
NEXT n
|
表示對從當前記錄開始的共n個記錄進行操作, n為正整數(shù)
|
|
RECORD n
|
指明操作對象是表文件的第n號記錄
|
|
REST
|
對從當前記錄起到文件結尾的全部記錄進行操作
|
2) FOR子句
用于指明進行操作的條件。
格式: FOR <條件>
指明只對指定范圍中那些符合給定條件的進行當前操作。
例如: list NEXT 6 FOR cj < 85
3) WHILE 子句
也用于指明進行操作的條件。
格式: WHILE <條件>
例如: list NEXT 6 WHILE cj < 85
4) FIELDS 子句
用于指明當前的操作涉及到表文件的哪些字段。
格式:BROWSE [ FIELDS 字段名1,字段名2……]
例如:BROWSE FIELDS xh,xm,cj
3. 記錄的定位
(1) 系統(tǒng)對記錄的三個控制標志
記錄開始標志:位于第一個記錄之前。其值用函數(shù)BOF()進行測試。
記錄指針標志:指向當前記錄。其值用函數(shù)RECNO()進行測試。
記錄結束標志:位于最后一個記錄之后。其值用函數(shù)EOF()進行測試。
記錄指針可以理解為保存當前記錄號的變量,它的初始值總是1,不可能為0或負數(shù),最大值是表中記錄總數(shù)+1。
剛打開表時記錄指針的情況
|
表中記錄情況
|
BOF()的值
|
RECNO()的值
|
EOF()的值
|
|
無記錄
|
.T.
|
1
|
.T.
|
|
有記錄
|
.F.
|
1
|
.F.
|
(2)記錄的定位方式
絕對定位:是指把指針移到指定的位置。
相對定位:
是指把指針從當前位置開始,相對于當前記錄向前或向后移動若干個記錄位置。
條件定位:
從表菜單中選擇轉到記錄:記錄號——實現(xiàn)絕對定位
定位… ——實現(xiàn)條件定位
記錄的定位
|
命令格式
|
功能
|
備注
|
|
絕對定位
|
GO TOP
|
將記錄指針定位到表文件之首
|
或 GOTO TOP
|
|
GO BOTTOM
|
將記錄指針定位到表文件之尾
|
或GOTO BOTTOM
|
|
GO <n>
|
將記錄指針定位到指定的n號記錄
|
|
|
相對定位
|
SKIP <n>
|
將記錄指針從當前記錄向上或向下移動n個
|
n為正值則向下移動
n為負值則向上移動
無n向下移動 1個
|
|
條件定位
|
LOCATE FOR <條件> [ 范圍 ]
|
按順序搜索表, 直到找到滿足指定條件的第一個記錄
|
默認范圍是所有記錄
|
4. 記錄的修改和刪除
一張表用非只讀方式打開后,即可通過菜單在瀏覽窗口(或編輯窗口)中或從命令窗口中用命令直接對其記錄進行編輯、修改和刪除。
(1) 菜單方式
修改記錄:
從表菜單中選擇替換字段… → 在替換字段對話框中選擇待替換的字段并構造出替換表達式及替換條件 → 替換。
刪除記錄:
從表菜單中選擇刪除記錄 → 在刪除對話框中選擇刪除范圍和刪除條件 → 單擊刪除按鈕 → 從表菜單中選擇徹底刪除 → 在消息框中單擊是。
刪除記錄包括兩步: 標記要刪除的記錄 和 徹底刪除帶刪除標記的記錄
恢復帶刪除標記的記錄:
從表菜單中選擇恢復記錄 → 在恢復記錄對話框中選擇作用范圍和條件 → 單擊恢復記錄按鈕。
(2) 在命令窗口中用VFP命令:
|
命令格式
|
功能
|
備注
|
| 插入 |
INSERT [BLANK][BEFORE]
|
在當前表的指定位置上插入一個空記錄或若干新記錄
|
BLANK :在當前記錄后插入一個空記錄
BEFORE :在當前記錄之前插入若干新記錄
|
| 修改 |
CHANGE [FIELDS 字段名1,…][FOR 條件] [LEDIT] [REDIT]
|
在編輯窗口顯示要修改的字段
|
LEDIT:調出編輯窗口
REDIT:調出瀏覽窗口
|
| 替換 |
REPLACE 字段名1 WITH 表達式1 [ADDITIVE][, 字段名2 WITH 表達式2[ADDITIVE] …] [范圍] [FOR 條件]
|
把字段值用指定的表達式進行替換。如: 工資單中給某些人長工資
|
默認范圍是當前記錄
ADDITIVE:把備注字段的替換內容添加在原備注內容的后面
|
| 刪除 |
DELETE [ 范圍 ][FOR 條件]
|
對當前表中指定范圍內滿足條件的記錄加上刪除標記 *
|
默認范圍是當前記錄
|
|
PACK [MEMO][DBF]
|
將所有帶刪除標記的記錄從表中抹去(不能再恢復)
|
DBF:不影響備注文件
MEMO:從備注文件中刪除未使用空間
|
|
ZAP
|
刪除當前表中所有記錄,只留下表的結構
|
|
| 恢復 |
RECALL [ 范圍] [FOR 條件]
|
取消當前表中指定記錄上的刪除標記
|
默認范圍是當前記錄
|
5. 篩選記錄和字段
(1) 用菜單方式
從表菜單中選擇屬性 → 在工作區(qū)屬性對話框中單擊數(shù)據(jù)過濾器框后的按鈕 → 在表達式生成器對話框中構造所需的條件表達式并確定 → 單擊字段篩選…按鈕 →在字段篩選器中選擇所需字段并確定 → 單擊選項按鈕:字段篩選指定的字段 → 確定。
(2)用命令方式
命令格式: SET FILTER TO 條件表達式
例: SET FILTER TO xb =‘男‘
注意:SQL命令對記錄的訪問不受此篩選命令的限制。
3.4 表的使用
1. 工作區(qū)
工作區(qū):
指用來標識一張打開的表的區(qū)域。一個工作區(qū)在某一時刻只能打開一張表,但可以同時在多個工作區(qū)打開多張表,一張可以在多個工作區(qū)中多次被打開。每個工作區(qū)都有一個編號。
表的別名:
在工作區(qū)中打開表時為該表所定義的名稱。可以自定義別名,否則系統(tǒng)默認就以表名作為別名。若一張表在多個工作區(qū)中被打開,系統(tǒng)默認在表名后依次加_a 、_b…。
自定義別名的格式: USE <表名> ALIAS <別名>
當前工作區(qū):
正在使用的工作區(qū)。可以通過“數(shù)據(jù)工作期窗口”或用 SELECT命令把任何一個工作區(qū)設置為當前工作區(qū)。
SELECT 命令格式: SELECT <工作區(qū)號>|<別名>
要操作非當前工作區(qū)中的表,可以把其它工作區(qū)選為當前工作區(qū),或在命令中強行指定工作區(qū)。
命令格式: IN <工作區(qū)號>|<別名>
ALIAS([工作區(qū)號])函數(shù):
測試指定工作區(qū)中的表的別名,無參數(shù)時指當前工作區(qū)表的別名。
SELECT([別名])函數(shù):
測試指定別名的表所在的工作區(qū)號,無參數(shù)時指當前工作區(qū)的區(qū)號。
2. 表的打開和關閉
|
打開表的途徑
|
關閉表的途徑
|
|
文件菜單中的打開
|
工具欄上的打開
|
數(shù)據(jù)工作期窗口中關閉
|
USE
|
|
數(shù)據(jù)工作期窗口中打開
|
USE <表名>
|
USE IN <別名>|<工作區(qū)號>
|
CLOSE ALL
|
|
USE <表名> IN <工作區(qū)號>
|
USE <表名>AGAIN
|
CLOSE DATABASE
|
CLOSE TABLE
|
|
USE <表名> ALIAS <別名>
|
退出VFP系統(tǒng),則關閉所有的表
|
3. 表的獨占與共享使用
獨占使用: 一張表只能被一個用戶打開。VFP6.0在默認狀態(tài)以獨占方式打開。
共享使用: 一張表可以被多個用戶同時打開。
系統(tǒng)的默認打開方式可以通過工具菜單中的選項…來設置,或 用命令:
SET EXCLUSIVE OFF && 默認打開方式為共享
SET EXCLUSIVE ON && 默認打開方式為獨占
或強行打開:USE cj SHARED && 以共享方式打開cj表
USE cj EXCLUSIVE && 以獨占方式打開cj表
3.5 表的索引
1. 基本概念
記錄的順序 :
物理順序:即表中記錄的存儲順序。用記錄號表示。
邏輯順序:表打開后被使用時記錄的處理順序。
索 引:
指按表文件中某個關鍵字段或表達式建立記錄的邏輯順序。它是由一系列記錄號組成的一個列表,提供對數(shù)據(jù)的快速訪問。索引不改變表中記錄的物理順序。表文件中的記錄被修改或刪除時,索引文件可自動更新。
索引關鍵字(索引表達式):用來建立索引的一個字段或字段表達式。
注意:1)用多個字段建立索引表達式時,表達式的計算結果將影響索引的結果;
2)不同類型字段構成一個表達式時,必須轉換數(shù)據(jù)類型。
索引標識(索引名):
即索引關鍵字的名稱。必須以下劃線、字母或漢字開頭,且不可超過10個字。
索引類型:主索引、候選索引、普通索引、唯一索引。
主索引:
組成主索引關鍵字的字段或表達式,在表的所有記錄中不能有重復的值。主索引只適用于數(shù)據(jù)庫表的結構復合索引中。自由表中不可以建立主索引;數(shù)據(jù)庫中的每個表可以且只能建立一個主索引。
候選索引:
在指定的關鍵字段或表達式中不允許有重復值的索引。在數(shù)據(jù)庫表和自由表中均可為每個表建立多個候選索引。
普通索引:
也可以決定記錄的處理順序,但是允許字段中出現(xiàn)重復值。在一個表中可以加入多個普通索引。
唯一索引:
參加索引的關鍵字段或表達式在表中可以有重復值,但在索引對照表中,具有重復值的記錄僅存儲其中的第一個。
2. 索引的作用
|
用途
|
采用的索引類型
|
|
排序記錄,以便顯示、查詢或打印
|
使用普通索引、候選索引或主索引
|
|
在字段中控制重復值的輸入并對記錄排序
|
對數(shù)據(jù)庫表使用主索引或候選索引,對自由表使用候選索引
|
|
準備設置表關系
|
依據(jù)表在關系中所起的作用,使用普通索引、主索引或候選索引
|
3.索引文件的種類
|
索引文件種類
|
特征
|
關鍵字數(shù)目
|
限制
|
|
結構復合索引文件
.CDX
|
使用和表文件名相同的基本名,隨表的打開自動打開??梢钥闯杀斫Y構的一部分。
|
多關鍵字表達式,稱為標識。
|
有效表達式限制在 240 個字符之內。
|
|
非結構復合索引文件
.CDX
|
必須明確地打開,使用和表名不同的基本名。其中不能創(chuàng)建主索引
|
多關鍵字表達式,稱為標識。
|
有效表達式限制在 符之240 個字內。
|
|
獨立索引文件
.IDX
|
必須明確地打開,文件的基本名由用戶定義。一般作為臨時索引文件。
|
單關鍵字表達式。
|
有效表達式限制在 100 個字符之內。
|
結構復合索引文件(擴展名為.CDX)的特點:
4. 創(chuàng)建結構復合索引
VFP中創(chuàng)建索引文件有兩種方式:表設計器方式和命令方式。
(1)表設計器方式
打開表文件 →從顯示菜單中選擇表設計器 → 在表設計器中單擊索引 → 輸入索引名并選擇索引類型 → 選擇索引的方向(按升序或降序排列記錄) → 在表達式框中輸入作為排序依據(jù)的索引關鍵字 → 在篩選框中輸入篩選表達式 → 單擊確定,完畢。
(2) 命令方式
|
命令
|
功能
|
|
INDEX ON <索引關鍵字段> TAG <索引標識>[FOR 條件 ] [ASCENDING | DESCENDING] [CANDIDATE | UNIQUE]
|
用INDEX ON 命令建立一個索引文件
|
|
ALTER TABLE <表名> ADD PRIMARY KEY <關鍵字段名> TAG <索引標識名>
|
用SQL命令創(chuàng)建主索引
|
|
ALTER TABLE <表名> ADD UNIQUE <關鍵字段名>TAG <索引標識名>
|
用SQL命令創(chuàng)建候選索引
|
注意:1)備注型字段和通用型字段不能作為索引關鍵字段;
2)不要建立無用的索引,以免降低系統(tǒng)性能;
3)及時清理已無用索引標識,提高系統(tǒng)效率。
4)在復合索引的多個索引中,某一時刻只有一個索引對表起作用。
5. 索引的修改和刪除
修改: 打開表設計器,在索引對話框中進行所需修改;
或 用命令重新建立一個相同標識名而索引表達式不同的索引。
刪除: 打開表設計器,在索引對話框中刪除不需要的索引標識即可;
或 用命令: DELETE TAG ALL | 索引標識1 [, 索引標識2 ] …
刪除不需要的索引標識,ALL表示全部標識。
6. 索引的使用
|
功能
|
命令格式
|
| 打開表的同時指定主控索引 |
USE <表名> ORDER <標識名>
|
| 為已打開的表確定主控索引 |
SET ORDER TO <標識名> [ASCENDING | DESCENDING] ]
|
| 搜索某張已建立索引的表 |
FIND <表達式>
|
| 搜索表中首次出現(xiàn)的記錄 |
SEEK <表達式> [ <索引標識名>]
|
|
SEEK <表達式>
|
3.6 VFP數(shù)據(jù)庫
1. 數(shù)據(jù)庫的基本組成
數(shù)據(jù)庫由一個以上相互關聯(lián)的數(shù)據(jù)表組成,可以包含一個或多個表、視圖、到遠程數(shù)據(jù)源的連接和存儲過程。
視圖(view):
一個保存在數(shù)據(jù)庫中的、由引用一個或多個表、或其他視圖的相關數(shù)據(jù)組成的虛擬表,可以是本地的、遠程的或帶參數(shù)的。
存儲過程(stored procedure):
是保存在數(shù)據(jù)庫中的一個過程。該過程能包含一個用戶自定義函數(shù)中的任何命令和函數(shù)。創(chuàng)建數(shù)據(jù)庫時系統(tǒng)自動生成3個文件:
數(shù)據(jù)庫文件: 擴展名為 .DBC
數(shù)據(jù)庫備注文件: 擴展名為 .DCT
數(shù)據(jù)庫索引文件: 擴展名為 .DCX
2. 數(shù)據(jù)庫的設計過程
1)明確建立數(shù)據(jù)庫的目的和使用方式
2)設計所需的數(shù)據(jù)表(包括表結構和表記錄)
3)建立表之間的關系
4)改進設計
3.7 數(shù)據(jù)庫的創(chuàng)建
1. 數(shù)據(jù)庫的創(chuàng)建過程
數(shù)據(jù)庫的創(chuàng)建過程中一般會涉及下面一些常用操作:
1)創(chuàng)建新表 → 用表設計器 (設置字段屬性和表屬性)
2)添加表 → 用數(shù)據(jù)庫設計器按鈕或數(shù)據(jù)庫菜單
3)創(chuàng)建視圖 → 用視圖向導、視圖設計器
4)建立關系 → 用鼠標將父表的索引拖到子表的相關索引上
5)編輯關系 → 用數(shù)據(jù)庫菜單或快捷菜單 → 參照完整性生成器
6)移去關系 → 用快捷菜單或按delete鍵
7)修改表 → 用表設計器
8)刪除表或視圖 → 用數(shù)據(jù)庫設計器按鈕或數(shù)據(jù)庫菜單
2. 數(shù)據(jù)庫的新建、打開、關閉
(1)新建數(shù)據(jù)庫:
從文件菜單中單擊新建 → 在新建對話框中選擇數(shù)據(jù)庫并單擊新文件 → 在創(chuàng)建對話框中給出庫文件名和保存位置 → 在數(shù)據(jù)庫設計器中建立所需的數(shù)據(jù)庫。
或 從命令窗口中輸入命令: create database 數(shù)據(jù)庫名
(2)打開數(shù)據(jù)庫:
從文件菜單中單擊打開 → 在打開對話框中給出庫文件名和保存位置并確定之。
或 從命令窗口中輸入命令: open database 數(shù)據(jù)庫名
(3)關閉數(shù)據(jù)庫:
從命令窗口中輸入命令:
close database && 關閉當前數(shù)據(jù)庫
或 close all && 關閉所有被打開的數(shù)據(jù)庫
注意:1) 關閉了數(shù)據(jù)庫表不等于關閉了數(shù)據(jù)庫,但關閉了數(shù)據(jù)庫則其中的數(shù)據(jù)表被同時關閉;
2) 用鼠標關閉了數(shù)據(jù)庫設計器窗口并不能代表關閉數(shù)據(jù)庫。
3. 用數(shù)據(jù)庫設計器設計數(shù)據(jù)庫
(1) 調出表設計器,建立一個新數(shù)據(jù)表
方法1:從數(shù)據(jù)庫菜單中選擇新表。
方法2:右擊數(shù)據(jù)庫設計器窗口,從快捷菜單中選擇新表。
方法3:單擊數(shù)據(jù)庫設計器工具欄的新表按鈕。
方法4:從文件菜單中單擊新建,在對話框中選擇表。
注意:
數(shù)據(jù)庫表的表設計器中內容比自由表的多,增加了字段屬性和表屬性的設置。設置驗證規(guī)則目的是為了使輸入的數(shù)據(jù)符合要求,在有矛盾時發(fā)出錯誤提示信息。
(2) 數(shù)據(jù)庫表的高級屬性
|
屬性類別
|
屬性名稱
|
作用
|
|
字
段
屬
性
|
字段顯示屬性
|
格式
|
確定字段內容在被顯示時的樣式 |
|
輸入掩碼
|
指定字段中輸入數(shù)據(jù)的格式(即所輸入的任何內容均顯示成此符號) |
|
標題
|
在瀏覽表時用此名稱代替意義不夠直觀的字段名 |
|
字段驗證規(guī)則
|
規(guī)則
|
使所輸數(shù)據(jù)符合設定的條件 |
|
信息
|
當所輸數(shù)據(jù)違反規(guī)則時,系統(tǒng)提示錯在哪里 |
|
默認值
|
減少輸入重復性數(shù)據(jù)時的工作量 |
|
字段注釋
|
|
使字段具有更好的可讀性 |
|
表
屬
性
|
長表名
|
|
與表文件名不同,設置了長表名可以一目了然 |
|
記錄驗證規(guī)則
|
規(guī)則
|
使所輸記錄符合設定的條件 |
|
信息
|
當所輸記錄違反規(guī)則時,系統(tǒng)提示錯在哪里 |
|
觸發(fā)器
|
插入觸發(fā)器
|
當所插記錄符合此規(guī)則時,才可以插入到表中 |
|
更新觸發(fā)器
|
當修改后的記錄符合此規(guī)則時,才可以進行修改 |
|
刪除觸發(fā)器
|
當待刪記錄符合此規(guī)則時,才可以被刪除掉 |
|
表注釋
|
|
使表具有更好的可讀性 |
字段級規(guī)則:
一種與字段相關的有效性規(guī)則,在插入或修改字段值時被激活,多用于數(shù)據(jù)輸入正確性的檢驗。
為字段設置驗證規(guī)則的方法:
.在表設計器中選定要建立規(guī)則的字段名。 .在“規(guī)則”方框旁邊選擇“…”按鈕。 .在表達式生成器中設置有效性表達式,并選擇“確定”。 .在“信息”框中,鍵入用引號括起的錯誤信息。 .在“默認值”框中,鍵入合理的初值。 .注意不同類型數(shù)據(jù)的表示方法。 .選擇“確定”
記錄級規(guī)則:
一種與記錄相關的有效性規(guī)則,當插入或修改記錄時激活,常用來檢驗數(shù)據(jù)輸入和正確性。記錄被刪除時不使用有效性規(guī)則。記錄級規(guī)則在字段級規(guī)則之后和觸發(fā)器之前激活,在緩沖更新時工作。
觸發(fā)器:
在一個插入、更新或刪除操作之后運行的記錄級事件代碼。不同的事件可以對應不同的動作。它們常用于交叉表的完整性。
(3) 在數(shù)據(jù)庫中添加表
方法1:從數(shù)據(jù)庫菜單中選擇添加表,從打開對話框中選擇所需的表并確定之。
方法2:右擊數(shù)據(jù)庫設計器窗口,從快捷菜單中選擇添加表。
方法3:單擊數(shù)據(jù)庫設計器工具欄的添加按鈕。
注意:
一個數(shù)據(jù)表在同一時間內只能屬于一個數(shù)據(jù)庫,已隸屬于其它數(shù)據(jù)庫的表不能直接被添加進來,需先將其移出數(shù)據(jù)庫還原成自由表。
(4) 創(chuàng)建并添加視圖
視圖用于顯示一個或多個表中的記錄,并能夠更新源表中的數(shù)據(jù),視圖只有在數(shù)據(jù)庫中才能存在。
方法1:從數(shù)據(jù)庫菜單中選擇新遠程視圖或新本地視圖
方法2:右擊數(shù)據(jù)庫設計器窗口,從快捷菜單中選擇新遠程視圖或新本地視圖
方法3:單擊數(shù)據(jù)庫設計器工具欄的新遠程視圖或新本地視圖按鈕
(5) 在數(shù)據(jù)庫中操作表和視圖
可以利用數(shù)據(jù)庫設計器工具欄很方便地進行下列操作:
瀏覽: 在瀏覽窗口中顯示表或視圖的內容。
修改: 調出表設計器或視圖設計器對表或視圖進行修改。
移去:使表從數(shù)據(jù)庫中還原成自由表。對視圖移去相當于刪除。
刪除:從磁盤上徹底刪除數(shù)據(jù)表和視圖,并且無法回收。
(6) 在表之間建立永久性關系
永久關系:
是數(shù)據(jù)庫表之間的一種關系,不僅運行時存在,而且一直保留。表之間的永久關系是通過索引建立的。
一對多關系:
表之間的一種關系,在這種關系中,主表中的每一個記錄與相關表中的多個記錄相關聯(lián)(每一個主關鍵字值在相關表中可出現(xiàn)多次)。
一對一關系:
表之間的一種關系,在這種關系中,主表中的每一個記錄只與相關表中的一個記錄相關聯(lián)。
創(chuàng)建表間的永久關系:
在數(shù)據(jù)庫設計器中,選擇想要關聯(lián)的索引名,然后把它拖到相關表的索引名上,所拖動的父表索引必須是一個主索引或候選索引。建立好關系后,這種關系在數(shù)據(jù)庫設計器中會顯示為一條連接兩個表的直線。
注意:需先建立索引然后才能建立關系。
刪除表間的永久關系:
在數(shù)據(jù)庫設計器中,單擊兩表間的關系線。關系線變粗,表明已選擇了該關系,按下 delete 鍵。
編輯關系:
單擊所需關系線,右擊鼠標,從快捷菜單中選擇編輯關系,在編輯關系對話框中改選其它相關表索引名或修改參照完整性規(guī)則。
參照完整性(RI):
控制數(shù)據(jù)一致性,尤其是不同表的主關鍵字和外部關鍵字之間關系的規(guī)則。Visual FoxPro 使用用戶自定義的字段級和記錄級規(guī)則完成參照完成性規(guī)則。
(7) 在表之間建立臨時關系
臨時關系:
是在打開的數(shù)據(jù)表之間用 set relation命令建立的臨時關系,或是在數(shù)據(jù)工作期窗口建立。建立了臨時關系后,子表的指針會隨主表記錄指針的移動。表被關閉后,關系自動解除。
臨時關系與永久關系的聯(lián)系與區(qū)別:
聯(lián)系:
(1)都必須明確建立關系的兩張表之間確實在客觀上存在著一種關系(一對多或一對一關系)。
(2)永久關系在許多場合可以作為默認的臨時關系。
區(qū)別:
(1)臨時關系是用來在打開的兩張表之間控制相關表之間記錄的訪問;而永久關系主要是用來存儲相關表之間的參照完整性,附帶地可以作為默認的臨時關系或查詢中默認的聯(lián)接條件。
(2)臨時關系在表打開之后使用set relation命令建立,隨表的關閉而解除;永久關系永久地保存在數(shù)據(jù)庫中而不必在每次使用表時重新創(chuàng)建。
(3)臨時關系可以在自由表之間、庫表之間或自由表與庫表之間建立,而永久關系只能在庫表之間建立。
(4)臨時關系中一張表不能有兩張主表(除非這兩張主表是通過子表的同一個主控索引建立的臨時關系),永久關系則不然。
4. 用命令方式操作數(shù)據(jù)庫
常用命令一覽表
|
命令格式
|
功能
|
| create database 庫文件名 |
創(chuàng)建新的數(shù)據(jù)庫文件 |
| open database 庫文件名 |
打開指定的庫文件 |
| close database |
關閉當前的數(shù)據(jù)庫和數(shù)據(jù)表 |
| close all |
關閉所有的數(shù)據(jù)庫和數(shù)據(jù)表,并把工作區(qū)1置為當前工作區(qū),同時還關閉一些窗口 |
| modify database |
修改當前庫文件結構 |
| delete database 庫文件名 |
刪除指定的庫文件 |
| open database 庫文件名
add table 表名
|
在數(shù)據(jù)庫中添加表 |
| open database 庫文件名
remove table 表名
|
將表從數(shù)據(jù)庫中移去 |
| open database 庫文件名
remove table 表文件名 delete
|
將表從數(shù)據(jù)庫中移去并從盤上刪除 |
| use 庫文件名 !表名
browse
|
“!”表示引用一個不在當前數(shù)據(jù)庫中的表 |
| Set relation to 關系表達式 into 區(qū)號 | 別名 |
建立表之間的臨時關系 |
| Set relation to |
刪除表之間的臨時關系 |
| alter table 子表名 add foreign key 索引關鍵字 tag 索引標識 references 父表名 [tag 索引標識 ] |
創(chuàng)建永久關系 |
| alter table 子表名 drop foreign key tag 索引標識 |
刪除永久關系 |
5. 數(shù)據(jù)庫表的約束機制
|
約束機制
|
級別
|
激活時機
|
| NULL值 |
字段
|
當從瀏覽中離開字段,或執(zhí)行INSERT或REPLEASE更改字段值時 |
| 字段級規(guī)則 |
字段
|
當從瀏覽中離開字段,或執(zhí)行INSERT或REPLEASE更改字段值時 |
| 主索引/候選索引 |
記錄
|
發(fā)生記錄更新時 |
| 記錄級規(guī)則 |
記錄
|
發(fā)生記錄更新時 |
| 觸發(fā)器 |
表
|
在INSERT、UPDATE或DELETE事件中,表中值改變時 |
| VALID子句 |
表單
|
移出記錄時 |
|