修改字段名 alter table 表名1 rename column 原字段 to 目的字段
添加字段名 ALTER TABLE 表名 ADD COLUMN 字段名 n(20,5)
刪除字段名 ALTER TABLE 表名 DROP COLUMN 字段名
修改字段類型 ALTER TABLE 表名 ALTER COLUMN 字段名 c(50)
語法
ALTER TABLE TableName1 ADD | ALTER [COLUMN] FieldName1 FieldType [(nFieldWidth [, nPrecision])] [NULL | NOT NULL] [CHECK lExpression1 [ERROR cMessageText1]] [DEFAULT eExpression1] [PRIMARY KEY | UNIQUE] [REFERENCES TableName2 [TAG TagName1]] [NOCPTRANS] [NOVALIDATE]
— 或者 —
ALTER TABLE TableName1 ALTER [COLUMN] FieldName2 [NULL | NOT NULL] [SET DEFAULT eExpression2] [SET CHECK lExpression2 [ERROR cMessageText2]] [DROP DEFAULT] [DROP CHECK] [NOVALIDATE]
— 或者 —
ALTER TABLE TableName1 [DROP [COLUMN] FieldName3] [SET CHECK lExpression3 [ERROR cMessageText3]] [DROP CHECK] [ADD PRIMARY KEY eExpression3 TAG TagName2 [FOR lExpression4]] [DROP PRIMARY KEY] [ADD UNIQUE eExpression4 [TAG TagName3 [FOR lExpression5]]] [DROP UNIQUE TAG TagName4] [ADD FOREIGN KEY [eExpression5] TAG TagName4 [FOR lExpression6] REFERENCES TableName2 [TAG TagName5]] [DROP FOREIGN KEY TAG TagName6 [SAVE]] [RENAME COLUMN FieldName4 TO FieldName5] [NOVALIDATE]
參數(shù)
TableName1
指定要修改其結(jié)構(gòu)的表名。
ADD [COLUMN] FieldName1
指定要添加的字段名。單個(gè)的表中最多可以有 255 個(gè)字段。 如果一個(gè)或更多的字段允許 null 值, 該限制為 254 個(gè)字段。
ALTER [COLUMN] FieldName1
指定要修改的已有的字段名。
FieldType [(nFieldWidth [, nPrecision])]
指定新字段或待修改字段的字段類型、字段寬度和字段精度(小數(shù)點(diǎn)后的位數(shù))。參數(shù) FieldType 是表示字段數(shù)據(jù)類型的單個(gè)字符。有些字段類型還需要參數(shù) nFiledWidth 或 nPrecision,或者兩者皆要。下表列出了參數(shù) FiledType 的值及其對(duì)應(yīng)參數(shù) nFiledWidth 和 nPression 的取舍情況:
字段類型 |
字段寬度 |
精度 |
說明 |
C |
n |
– |
寬度為 n 的字符字段 |
D |
– |
– |
日期 |
T |
– |
– |
日期時(shí)間 |
N |
n |
d |
寬度為 n 的數(shù)值型字段,小數(shù)點(diǎn)后保留 d 位 |
F |
n |
d |
寬度為 n 的浮點(diǎn)型字段,小數(shù)點(diǎn)后保留 d 位 |
I |
– |
– |
整數(shù)型 |
B |
– |
d |
雙精度型 |
Y |
– |
– |
貨幣型 |
L |
– |
– |
邏輯型 |
M |
– |
– |
備注型 |
G |
– |
– |
通用型 |
P |
– |
– |
圖象 |
對(duì)于 D、T、I、Y、L、M、G 和 P 型數(shù)據(jù),省略參數(shù) nFieldWidth 和 nPrecision。
如果對(duì) N、F 或 B 型數(shù)據(jù)沒有給出參數(shù) nPrecision 的值,其的默認(rèn)值為零。
NULL | NOT NULL 允許或不允許字段為空值。如果省略 NULL 和 NOT NULL,當(dāng)前的 SET NULL 設(shè)置將決定字段是否允許為空;并且如果命令中帶有 PRIMARY KEY 或 UNIQUE 子句,當(dāng)前的 SET NULL 設(shè)置不起作用,字段默認(rèn)狀況為非空。
CHECK lExpression1 指定字段的有效性規(guī)則。lExpression1 為邏輯表達(dá)式值,可以是用戶定義的函數(shù)或存儲(chǔ)過程。
注意:每添加一個(gè)空記錄時(shí),都將進(jìn)行有效性檢查。如果有效性規(guī)則不允許添加的記錄中有空字段值,VisualFoxPro 將產(chǎn)生錯(cuò)誤信息。
ERROR cMessageText1 指定字段有效性檢查出現(xiàn)錯(cuò)誤時(shí)顯示的錯(cuò)誤信息。只有在“瀏覽”或“編輯”窗口中修改數(shù)據(jù)時(shí),此信息才可能顯示。
DEFAULT eExpression1 指定字段默認(rèn)值。eExpression1 的數(shù)據(jù)類型必須與字段的數(shù)據(jù)類型相同。
PRIMARY KEY 創(chuàng)建主索引標(biāo)識(shí)。索引標(biāo)識(shí)與字段同名。
UNIQUE 創(chuàng)建與字段同名的候選索引標(biāo)識(shí)。有關(guān)候選索引的詳細(xì)內(nèi)容,請(qǐng)參閱《開發(fā)指南》的第七章“處理表”。
附注候選索引(由 UNIQUE 選項(xiàng)創(chuàng)建,具有在 ALTER TABLE 或 CREATE TABLE 中的 ANSI 兼容性。)與帶 UNIQUE 選項(xiàng)的 INDEX 命令創(chuàng)建的索引不同。用帶 UNIQUE 選項(xiàng)的 INDEX 命令創(chuàng)建的索引允許有重復(fù)索引關(guān)鍵字,而候選索引不允許有重復(fù)索引關(guān)鍵字。
在主索引或候選索引字段中,不允許有空值和重復(fù)記錄。如果用 ADD COLUMN 子句創(chuàng)建一個(gè)新字段,若給允許空值的字段創(chuàng)建主索引或候選索引,VisualFoxPro 不會(huì)產(chǎn)生錯(cuò)誤。但是,如果您試圖往用作主索引或候選索引的字段中輸入空值或重復(fù)值,VisualFoxPro 將產(chǎn)生錯(cuò)誤信息。如果修改已有的字段和由字段組成的主索引表達(dá)式或候選表達(dá)式時(shí),將檢查字段是否為空值或重復(fù)記錄。如果為空值或重復(fù)記錄,Visual FoxPro 將產(chǎn)生錯(cuò)誤,并且不對(duì)表進(jìn)行修改。
REFERENCES TableName2 TAG TagName1 指定與之建立永久關(guān)系的父表。參數(shù) TAG TagName1 指定父表索引標(biāo)識(shí),關(guān)系建立在此父表索引標(biāo)識(shí)基礎(chǔ)上。索引標(biāo)識(shí)最長為 10 個(gè)字。
NOCPTRANS 防止對(duì)字符串或備注字段進(jìn)行代碼頁轉(zhuǎn)換。如果表轉(zhuǎn)換到另一代碼頁,指定了 NOCPTRANS 的字段不進(jìn)行轉(zhuǎn)換。NOCPTRANS 只能指定字符字段和備注字段。
下面的例子建立了一個(gè)名字為 MYTABLE 的表:該表包括兩個(gè)字符字段和兩個(gè)備注字段。第二個(gè)字符字段 char2 和第二個(gè)備注字段 memo2 包含 NOCPTRANS 以防止轉(zhuǎn)換。
CREATE TABLE mytable (char1 C(10), char2 C(10) NOCPTRANS,; memo1 M, memo2 M NOCPTRANS) ALTER [COLUMN] FieldName2
指定要修改的已有的字段名。
SET DEFAULT eExpression2 指定已有字段的新默認(rèn)值。eExpression2 的數(shù)據(jù)類型必須與字段數(shù)據(jù)類型相同。
SET CHECK lExpression2 指字已有字段新的有效性規(guī)則。lExpression2 值必須為邏輯表達(dá)式,也可以為用戶自定義函數(shù)或已有的過程。
ERROR cMessageText2 指定有效性檢查出現(xiàn)錯(cuò)誤時(shí)顯示的錯(cuò)誤信息。只有在“瀏覽”窗口或“編輯”窗口改變數(shù)據(jù)時(shí),才可能顯示此信息。
DROP DEFAULT 刪除已有字段的默認(rèn)值。
DROP CHECK 刪除已有字段的有效性規(guī)則。
DROP [COLUMN] FieldName3 從表中刪除一個(gè)字段。刪除一個(gè)字段的同時(shí)也刪除了字段的默認(rèn)值和字段有效性規(guī)則。字段被刪除后,索引關(guān)鍵字或引用此字段的觸發(fā)器表達(dá)式將變?yōu)闊o效。在這種情況下,刪除字段并不產(chǎn)生錯(cuò)誤,但是在運(yùn)行時(shí)刻,無效的索引關(guān)鍵字或觸發(fā)器表達(dá)式將導(dǎo)致錯(cuò)誤。
SET CHECK lExpression3 指定表的有效性規(guī)則。lExpression3 必須是邏輯表達(dá)式,也可以是用戶自定義函數(shù)或已有的過程。
ERROR cMessageText3 指定表的有效性檢查出現(xiàn)錯(cuò)誤時(shí)顯示的錯(cuò)誤信息。只有在“瀏覽”窗口或“編輯”窗口中改變數(shù)據(jù)值時(shí),才可能顯示此信息。
DROP CHECK 刪除表的有效性規(guī)則。
ADD PRIMARY KEY eExpression3 TAG TagName2 往表中添加主索引,eExpression 指定主索引關(guān)鍵字表達(dá)式,TagName2 指定主索引標(biāo)識(shí)名,索引標(biāo)識(shí)名最長為 10 個(gè)字符。如果省略TAG TagName2 而 eExpression3 是一個(gè)字段,主關(guān)鍵索引標(biāo)識(shí)與指定的 eExpression3 同名。
DROP PRIMARY KEY 刪除主索引及其標(biāo)識(shí)。因?yàn)楸碇荒苡幸粋€(gè)主關(guān)鍵字,所以不必指定關(guān)鍵字的名稱。刪除主索引也將刪除所有基于此關(guān)鍵字的永久關(guān)系。
ADD UNIQUE eExpression4 [TAG TagName3] 往表中添加候選索引。eExpression4 指定候選索引關(guān)鍵字表達(dá)式,TagName3 指定候選索引標(biāo)識(shí)名。候選標(biāo)識(shí)名最長可為 10 個(gè)字符。如果省略參數(shù) TAG TagName3 并且 eExpression4 為單個(gè)字段,候選索引標(biāo)識(shí)與 eExpression4 中的指定的字段同名。
DROP UNIQUE TAG TagName4 刪除候選索引及其標(biāo)識(shí)。因?yàn)楸砜赡苡卸鄠€(gè)候選關(guān)鍵字,所以必須指定候選索引標(biāo)識(shí)名。
ADD FOREIGN KEY [eExpression5] TAG TagName4 往表中添加外部關(guān)鍵字(非主關(guān)字)索引。
eExpression5 指定外部索引關(guān)鍵字表達(dá)式,TagName4 指定外部索引標(biāo)識(shí)名。索引標(biāo)識(shí)名最長為 10 個(gè)字符。
REFERENCES TableName2 [TAG TagName5] 指定在其上創(chuàng)建了永久關(guān)系的父表。使用 TAG TagName5 指定一個(gè)已有的索引標(biāo)識(shí),基于此索引標(biāo)識(shí)建立表與父表的一個(gè)關(guān)系。索引標(biāo)識(shí)名最長可以為 10 個(gè)字符。如果省略參數(shù) TAG TagName5,則使用父表的主索引標(biāo)識(shí)建立關(guān)系。
DROP FOREIGN KEY TAG TagName6 [SAVE] 刪除索引標(biāo)識(shí)為 TagName6 的外部關(guān)鍵字。如果省略 SAVE 參數(shù),將從結(jié)構(gòu)索引中刪除索引標(biāo)識(shí)。如果加入 SAVE 參數(shù),則不從結(jié)構(gòu)索引中刪除索引標(biāo)識(shí)。
RENAME COLUMN FieldName4 TO FieldName5 允許改變表中字段的字段名。FieldName4 指定待更改的字段名,F(xiàn)ieldName5 指定新的字段名。
注意 改變表的字段名時(shí)一定要小心--索引表達(dá)式、字段和表的有效性規(guī)則、命令、函數(shù)等等可能仍會(huì)引用原始字段名。 NOVALIDATE 選用這一選項(xiàng)后,Visual FoxPro 修改表的結(jié)構(gòu)不受表中數(shù)據(jù)完整性的約束。默認(rèn)時(shí),Visual FoxPro 改變表結(jié)構(gòu)將受到表中數(shù)據(jù)的完整性約束。使用 NOVALIDATE 參數(shù)將使默認(rèn)情況無效。
說明 ALTER TABLE 命令可以用于修改還沒有添加到數(shù)據(jù)庫中的表的結(jié)構(gòu)。然而在修改自由表時(shí),如果加入 DEFAULT、FOREIGN KEY、PRIMARY REFERENCES 或 SET 子句,Visual FoxPro 將出現(xiàn)錯(cuò)誤。
ALTER TABLE 命令可以通過建立新表頭和往表頭中添加記錄來重建表。例如,改變字段類型或字段寬度。表經(jīng)過重建后,將對(duì)所有改變了類型或?qū)挾鹊淖侄螆?zhí)行字段有效性規(guī)則。如果修改了表中所有字段的類型或?qū)挾龋瑢?zhí)行表的有效性規(guī)則。如果對(duì)已含有記錄的表修改其字段有效規(guī)則或表有效性規(guī)則,Visual FoxPro 將檢查新的字段或表有效性規(guī)則是否與存在數(shù)據(jù)相符合,并在發(fā)現(xiàn)有不符之處時(shí)發(fā)出警告。 如果要修改的表在數(shù)據(jù)庫中,ALTER TABLE-SQL 命令需要獨(dú)占使用數(shù)據(jù)庫。若要獨(dú)占打開數(shù)據(jù)庫,可使用包含 EXCLUSIVE 子句的 OPEN DATABASE 命令。