資源描述:
《SQL數(shù)據(jù)庫修改表結(jié)構(gòu).doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、SQL數(shù)據(jù)庫修改表結(jié)構(gòu)修改表結(jié)構(gòu)包括:增加字段、刪除字段、增加約束、刪除約束、修改缺省值、修改字段數(shù)據(jù)類型、重命名字段、重命名表。所有這些動作都是用ALTERTABLE命令執(zhí)行的。1、增加字段ALTERTABLEproductsADDdescriptiontext;你也可以同時在該字段上定義約束,使用通常的語法:ALTERTABLEproductsADDdescriptiontextCHECK(description<>'');實際上,所有在 CREATETABLE 里描述的可以應用于字段之選項都可以在這里使用。不過,我們要注意的是缺省值必須滿足給出的約束,否則 ADD 將會失敗。另外,你可
2、以在你正確填充了新字段的數(shù)值之后再增加約束(見下文)。2、刪除字段要刪除一個字段,使用下面這樣的命令:ALTERTABLEproductsDROPCOLUMNdescription;不管字段里有啥數(shù)據(jù),都會消失。和這個字段相關(guān)的約束也會被刪除。不過,如果這個字段被另外一個表的外鍵所引用,PostgreSQL則不會隱含地刪除該約束。你可以通過使用CASCADE來授權(quán)刪除任何依賴該字段的東西:ALTERTABLEproductsDROPCOLUMNdescriptionCASCADE;3、增加約束要增加一個約束,使用表約束語法。比如:ALTERTABLEproductsADDCHECK(name
3、<>'');ALTERTABLEproductsADDCONSTRAINTsome_nameUNIQUE(product_no);ALTERTABLEproductsADDFOREIGNKEY(product_group_id)REFERENCESproduct_groups;ALTERTABLETeacheraddconstraintdf_sexdefault('男')forsex要增加一個不能寫成表約束的非空約束,使用下面語法:ALTERTABLEproductsALTERCOLUMNproduct_noSETNOTNULL;這個約束將立即進行檢查,所以表在添加約束之前必須符合約束條件。
4、4、刪除約束要刪除一個約束,你需要知道它的名字。如果你給了它一個名字,那么事情就好辦了。否則系統(tǒng)會分配一個生成的名字,這樣你就需要把它找出來了。psql的命令dtablename在這兒可以幫忙;其它接口可能也提供了檢查表的細節(jié)的方法。然后就是這條命令:ALTERTABLEproductsDROPCONSTRAINTsome_name;(如果你在處理一個生成的約束名,比如$2,別忘了你需要給它添加雙引號,讓它成為一個有效的標識符。)和刪除字段一樣,如果你想刪除有著被依賴關(guān)系地約束,你需要用CASCADE。一個例子是某個外鍵約束依賴被引用字段上的唯一約束或者主鍵約束。除了非空約束外,所有約束類
5、型都這么用。要刪除非空類型,用ALTERTABLEproductsALTERCOLUMNproduct_noDROPNOTNULL;(要記得非空約束沒有名字。)5、改變一個字段的缺省值要給一個字段設置缺省值,使用一個象下面這樣的命令:ALTERTABLEproductsALTERCOLUMNpriceSETDEFAULT7.77;請注意這么做不會影響任何表中現(xiàn)有的數(shù)據(jù)行,它只是為將來 INSERT 命令改變?nèi)笔≈怠R獎h除缺省值,用ALTERTABLEproductsALTERCOLUMNpriceDROPDEFAULT;這樣實際上相當于把缺省設置為空。結(jié)果是,如果我們刪除一個還沒有定義的缺省
6、值不算錯誤,因為缺省隱含就是空值。6、修改一個字段的數(shù)據(jù)類型ALTERTABLEproductsALTERCOLUMNpriceTYPEnumeric(10,2);只有在字段里現(xiàn)有的每個項都可以用一個隱含的類型轉(zhuǎn)換轉(zhuǎn)換城新的類型時才可能成功。如果需要更復雜的轉(zhuǎn)換,你可以增加一個USING子句,它聲明如何從舊值里計算新值。PostgreSQL將試圖把字段的缺省值(如果存在)轉(zhuǎn)換成新的類型,還有涉及該字段的任何約束。但是這些轉(zhuǎn)換可能失敗,或者可能生成奇怪的結(jié)果。在修改某字段類型之前,你最好刪除那些約束,然后再把自己手工修改過的添加上去。7、給字段改名字ALTERTABLEproductsRENA
7、MECOLUMNproduct_noTOproduct_number;8、.給表改名字ALTERTABLEproductsRENAMETOitems;