這次的教材裡面介紹了如何用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語句運算元據表及結構就更方便了!
一些簡單的SQL語句結構
筆試裡除了複雜一些的select語句,也會有一些update等語句,從w3school看了一下,總結一下 insert語句 語法 insert into table name 列1,列2,values 值1,值2,例項 insert into persons lastname,address val...
Android 過時方法的一些修改
1 過時的方法 popupwindow.setbackgrounddrawable new bitmapdrawable 改正 popupwindow.setbackgrounddrawable new colordrawable 0x00000000 也可以使用new colordrawable ...
表空間管理的相關的一些sql
那天系統出現問題,同事說會不會是資料庫空間不足造成的,想了想檢視空間使用方面的sql我根本不知道,呵呵,當時就在baidu隨便搜了個,執行很慢,當時也沒在意就過去了,今天碰巧看到itpub上一位兄弟總結了這方面的操作,我利用工作時間學習實踐了一下呵呵,然後又用自己的語言稍加了修改,姑且就算原創吧,呵...