sql語句修改表結構

這次的教材裏面介紹瞭如何用sql語句創建一個數據庫和相應的表結構,也說明了表結構的細節設計如約束等,但是沒有說明如果創建了一個表結構後修改這個結構,是重新創建還是可以直接修改,學員經常會提出這些問題,下面對使用sql語句修改表結構做一個說明。

修改表結構包括:增加字段、刪除字段、增加約束、刪除約束、修改缺省值、修改字段數據類型、重命名字段、重命名錶。所有這些操作都是用 alter table 命令執行的。

1、增加字段,增加字段需要注意的是如果源表裏面已經有相應的值,那麼新增加的字段需要設置爲可以爲null,不然會造成增加異常。它的語法是這樣的:

alter table 表名 add 字段名 字段類型;

你也可以同時在該字段上定義約束,使用通常的語法,如:

alter table 表名 add  字段名 字段類型 check (添加約束的字段名 <> '');

實際上,所有在 create table 裏描述的可以應用於字段之選項都可以在這裏使用。不過,我們要注意的是缺省值必須滿足給出的約束,否則 add 將會失敗。

2、 刪除字段

要刪除一個字段,使用下面這樣的命令:

alter table 表名 drop column 字段列名;

不管字段裏有啥數據,都會消失。和這個字段相關的約束也會被刪除。 不過,如果這個字段被另外一個表的外鍵所引用,postgresql 則不會隱含地刪除該約束。你可以通過使用 cascade 來授權刪除任何依賴該字段的東西,如:

alter table 表名 drop column 字段名 cascade;

 3、增加約束

要增加一個約束,使用表約束語法。比如:

alter table 表名 add check (字段名 <> '');

alter table 表名 add constraint 約束名稱 unique (字段名);

4、 刪除約束

要刪除一個約束,語法是這樣的:

alter table 表名 drop constraint 約束名;(如果你在處理一個生成的約束名,比如 $2,別忘了你需要給它 添加雙引號,讓它成爲一個有效的標識符。)

和刪除字段一樣,如果你想刪除有着被依賴關係地約束,你需要用 cascade。 一個例子是某個外鍵約束依賴被引用字段上的唯一約束或者主鍵約束。

除了非空約束外,所有約束類型都這麼用。要刪除非空類型,用

alter table 表史 alter column 字段名 drop not null;(要記得非空約束沒有名字。)

5、改變一個字段的缺省值

要給一個字段設置缺省值,使用一個象下面這樣的命令:

alter table 表名 alter column 字段名 set default 默認值;

這裏一定要注意這麼做不會影響任何表中現有的數據行, 它只是爲將來 insert 命令改變缺省值。

同時如果要刪除缺省值,用

alter table 表名 alter column 字段名 drop default;

這樣實際上相當於把缺省設置爲空。 結果是,如果我們刪除一個還沒有定義的缺省值不算錯誤,因爲缺省隱含就是空值。

6、 修改一個字段的數據類型,這是我們用得很多的操作。語法是這樣的:

alter table 表名 alter column 字段名 type 新的類型;

只有在字段裏現有的每個項都可以用一個隱含的類型轉換轉換城新的類型時纔可能成功。也就是說新類型和源始類型必須存在兼容的關係,類似於程序語言中的自動轉換時所要求的條件。如果需要更復雜的轉換,你可以增加一個 using 子句,它聲明如何從舊值裏計算新值。

這個方法將試圖把字段的缺省值(如果存在)轉換成新的類型, 還有涉及該字段的任何約束。但是這些轉換可能失敗,或者可能生成奇怪的結果。 在修改某字段類型之前,你最好刪除那些約束,然後再把自己手工修改過的添加上去。

7、給字段改名字

alter table 表名 rename column 源字段名 to 新字段名;

8、給表改名字

alter table 表名 rename to 新表名;

有了這些之後,用sql語句操作數據表及結構就更方便了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章