ALTER TABLE - SQL 命令
以程序設計方式修改數據表的結構。
語法
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]
- Or -
ALTER TABLE TableName1
ALTER [COLUMN] FieldName2
[NULL | NOT NULL]
[SET DEFAULT eExpression2]
[SET CHECK lExpression2 [ERROR cMessageText2]]
[DROP DEFAULT]
[DROP CHECK]
- Or -
ALTER TABLE TableName1
[DROP [COLUMN] FieldName3]
[SET CHECK lExpression3 [ERROR cMessageText3]]
[DROP CHECK]
[ADD PRIMARY KEY eExpression3 TAG TagName2]
[DROP PRIMARY KEY]
[ADD UNIQUE eExpression4 [TAG TagName3]]
[DROP UNIQUE TAG TagName4]
[ADD FOREIGN KEY [eExpression5] TAG TagName4
REFERENCES TableName2 [TAG TagName5]]
[DROP FOREIGN KEY TAG TagName6 [SAVE]]
[RENAME COLUMN FieldName4 TO FieldName5]
[NOVALIDATE]
引數
TableName1
指定已修改其結構之資料表的名稱。
ADD [COLUMN] FieldName1
指定要加入的功能變數名稱。
ALTER [COLUMN] FieldName1
指定要修改的現有功能變數名稱。
FieldType [ ( nFieldWidth [, nPrecision]])
指定新或修改欄位) 小數字數 (欄位類型、欄位寬度和欄位有效位數。
FieldType 是單一字母,表示欄位的 數據類型。 某些字段數據類型需要您指定 nFieldWidth 或 nPrecision 或兩者。
D、G、I、L、M、P、T 和 Y 類型會忽略 nFieldWidth 和 nPrecision。 根據預設,如果 B、F 或 N 類型不包含 nPrecision,則 nPrecision 為零 (沒有小數位數) 。
NULL | NOT NULL
允許或防止欄位中的 Null 值。
如果您省略 NULL 和 NOT NULL,SET NULL 的目前設定會決定欄位中是否允許 Null 值。 不過,如果您省略 NULL 和 NOT NULL 並包含 PRIMARY KEY 或 UNIQUE 子句,則會忽略 SET NULL 的目前設定,而且欄位預設為 NOT NULL。
CHECK lExpression1
指定欄位的驗證規則。 lExpression1 必須評估為邏輯表達式,而且可以是使用者定義的函數或預存程式。 每當附加空白記錄時,就會檢查驗證規則。 如果驗證規則不允許附加記錄中的空白域值,就會產生錯誤。
ERROR cMessageText1
指定欄位驗證規則產生錯誤時所顯示的錯誤訊息。
DEFAULT eExpression1
指定欄位的預設值。 eExpression1 的數據類型必須與欄位的數據類型相同。
PRIMARY KEY
建立主要索引標籤。 索引標籤的名稱與欄位相同。
UNIQUE
建立與欄位同名的候選索引標籤。
注意
候選索引 (藉由包含 UNIQUE 選項所建立,為 ALTER TABLE 或 CREATE TABLE) 提供的 ANSI 相容性提供,與使用 INDEX 命令中的 UNIQUE 選項所建立的索引不同。 在 INDEX 命令中使用 UNIQUE 建立的索引允許重複的索引鍵;候選索引不允許重複的索引鍵。
在用於主要或候選索引的欄位中,不允許 Null 值和重複的記錄。
如果您要使用 ADD COLUMN 建立新的欄位,如果您為支援 Null 值的欄位建立主要或候選索引,Visual FoxPro 將不會產生錯誤。 不過,如果您嘗試在用於主要或候選索引的欄位中輸入 Null 或重複值,Visual FoxPro 將會產生錯誤。
如果您要修改現有的欄位,而主要或候選索引表示式是由數據表中的欄位所組成,Visual FoxPro 會檢查欄位是否包含 Null 值或重複的記錄。 如果這樣做,Visual FoxPro 會產生錯誤,而且數據表不會改變。
REFERENCES TableName2TAG TagName1
指定建立持續性關聯性的父數據表。 TAG TagName1 會指定關聯性所依據的父數據表索引標籤。 索引標籤名稱最多可以包含10個字元。
NOCPTRANS
防止翻譯字元和備忘欄位的不同代碼頁。 如果數據表轉換成另一個代碼頁,則不會轉譯 NOCPTRANS 的欄位。 NOCPTRANS 只能針對字元和備忘欄位指定。
下列範例會建立名為 mytable 的數據表,其中包含兩個字元欄位和兩個備忘字段。 第二個字元欄位 char2 和第二個備忘欄位 memo2 包含 NOCPTRANS 以防止翻譯。
CREATE TABLE mytable (char1 C(10), char2 C(10) NOCPTRANS,;
memo1 M, memo2 M NOCPTRANS)
ALTER [COLUMN] FieldName2
指定要修改的現有功能變數名稱。
SET DEFAULT eExpression2
指定現有欄位的新預設值。 eExpression2 的數據類型必須與欄位的數據類型相同。
SET CHECK lExpression2
指定現有欄位的新驗證規則。 lExpression2 必須評估為邏輯表達式,而且可能是使用者定義的函數或預存程式。
ERROR cMessageText2
指定欄位驗證規則產生錯誤時所顯示的錯誤訊息。 只有在 [瀏覽] 或 [編輯] 視窗內的數據變更時,才會顯示訊息。
DROP DEFAULT
拿掉現有欄位的預設值。
DROP CHECK
拿掉現有欄位的驗證規則。
DROP [COLUMN] FieldName3
指定要從資料表中移除的欄位。 從數據表移除欄位也會移除欄位的預設值設定和欄位驗證規則。
如果索引鍵或觸發程式表達式參考字段,當移除字段時,表達式就會變成無效。 在此情況下,移除欄位時不會產生錯誤,但無效的索引鍵或觸發程式表示式會在運行時間產生錯誤。
SET CHECK lExpression3
指定數據表驗證規則。 lExpression3 必須評估為邏輯表達式,而且可能是使用者定義的函數或預存程式。
ERROR cMessageText3
指定資料表驗證規則產生錯誤時所顯示的錯誤訊息。 只有在 [瀏覽] 或 [編輯] 視窗內的數據變更時,才會顯示訊息。
DROP CHECK
拿掉資料表的驗證規則。
ADD PRIMARY KEY eExpression3TAG TagName2
將主要索引加入數據表。 eExpression3 會指定主索引鍵表示式, 而 TagName2 會指定主要索引標籤的名稱。 索引標籤名稱最多可以包含10個字元。 如果省略 TAG TagName2 且 eExpression3 是單一欄位,則主要索引標籤的名稱與 eExpression3 中指定的欄位相同。
DROP PRIMARY KEY
拿掉主要索引及其索引標籤。 因為數據表只能有一個主鍵,所以不需要指定主鍵的名稱。 拿掉主要索引也會根據主鍵刪除任何持續性關聯。
ADD UNIQUE eExpression4[ TAG TagName3]
將候選索引加入數據表。 eExpression4 會指定候選索引鍵表示式, 而 TagName3 會指定候選索引標籤的名稱。 索引標籤名稱最多可以包含10個字元。 如果您省略 TAG TagName3 ,且 eExpression4 是單一欄位,則候選索引標籤標的名稱與 eExpression4 中指定的欄位相同。
DROP UNIQUE TAG TagName4
拿掉候選索引及其索引標籤。 因為數據表可以有多個候選索引鍵,所以您必須指定候選索引標籤的名稱。
ADD FOREIGN KEY [ eExpression5]TAG TagName4
將外部 (非特殊) 索引加入至數據表。 eExpression5 會指定外索引鍵表示式, 而 TagName4 會指定外部索引標籤的名稱。 索引標記名稱最多可以包含10個字元。
REFERENCES TableName2[TAG TagName5]
指定建立持續性關聯性的父數據表。 包含 TAG TagName5 ,以根據父數據表的現有索引標籤建立關聯。 索引標記名稱最多可以包含10個字元。 如果您省略 TAG TagName5,則會使用父數據表的主要索引標籤來建立關聯性。
DROP FOREIGN KEY TAG TagName6[SAVE]
刪除索引標籤為 TagName6的外鍵。 如果您省略 SAVE,則會從結構索引中刪除索引標籤。 包含 SAVE 以防止從結構化索引中刪除索引標籤。
將 COLUMN FieldName4 重新命名為 FieldName5
可讓您變更數據表中的功能變數名稱。 FieldName4 會指定重新命名的功能變數名稱。 FieldName5 會指定欄位的新名稱。
警告
重新命名數據表欄位時,請小心,因為索引表示式、欄位和數據表驗證規則、命令和函式可能會參考原始功能變數名稱。
NOVALIDATE
指定 Visual FoxPro 允許變更資料表的結構;這些變更可能會違反數據表中數據的完整性。 根據預設,Visual FoxPro 會防止 ALTER TABLE 進行違反數據表中數據完整性的變更。 包含NOVALIDATE 以覆寫此預設行為。
備註
ALTER TABLE 可用來修改尚未加入資料庫之數據表的結構。 不過,如果您在修改可用數據表時包含 DEFAULT、FOREIGN KEY、PRIMARY KEY、REFERENCES 或 SET 子句,Visual FoxPro 會產生錯誤。
ALTER TABLE 可以藉由建立新的數據表標頭,並將記錄附加至數據表標頭,來重建數據表。 例如,變更欄位的類型或寬度可能會導致重建數據表。
重建數據表之後,會針對類型或寬度變更的任何欄位執行欄位驗證規則。 如果您變更數據表中任何字段的類型或寬度,則會執行資料表規則。
如果您修改具有記錄之數據表的欄位或數據表驗證規則,Visual FoxPro 會針對現有的數據測試新的欄位或數據表驗證規則,並在第一次出現欄位或數據表驗證規則或觸發程式違規時發出警告。
如果您修改的數據表位於資料庫中,ALTER TABLE - SQL 需要獨佔使用資料庫。 若要開啟資料庫以供獨佔使用,請在 OPEN DATABASE 中包含 EXCLUSIVE。