Oracle入門教程:db2的alter用法

來源:互聯網
上載者:User

用慣了Oracle的alter語句,把這些語句在db2中使用有些是不行的。

舉例表如下:

create table emp (id int, name char(20),salary decimal(18,2));         --建立表emp

db2的alter語句用法如下:

(1)增加列

alter table emp add sex char(1);   ---增加sex這一列

(2)更改欄位類型

alter table emp alter column sex set data type char(3);   ---將sex這一列修改為char(3)

alter table emp alter column sex set data type char(2);   ---將sex這列修改回char(2)

insert into emp values (1,'smith',18.23,'22');              ---向emp表插入一條記錄

alter table emp alter column sex set data type char(3);    ---在有記錄的情況下,將sex這列修改為char(3),            成功

alter table emp alter column sex set data type char(1);    ---在有記錄的情況下,將sex這列修改為char(1),            失敗---“指定的屬性與現有列不相容”

alter table emp alter column sex set data type decimal(18,2);  ---在有記錄的情況下,將sex這列修改為decimal(18,2),              成功(原來是'22'被轉換成了22.00)

alter table emp alter column sex set data type char(2);  ---將sex這列修改回char(2)                                                   失敗---“指定的屬性與現有列不相容”

alter table emp alter column sex set data type char(5);  ---將sex這列修改為char(5)                                                   成功(原來的數字22.00被轉換成了字元'22.00',5個位元組)

delete from emp;  insert into  emp values (1,'smith',18.23,'dd');  ----刪除原來的資料,並插入新的資料

alter table emp alter column sex set data type decimal(18,2);  ---在有記錄的情況下,將sex這列修改為decimal(18,2),   失敗---“指定的屬性與現有列不相容”('dd'和數字不相容)

以上語句是我再windows平台+db2v9.5上實驗啟動並執行。

我像通過以上語句,應該可以對db2的alter語句有一個比較詳細的瞭解,

如果要更改db2的類型,

(a)首先要保證目標類型和要當前表中所有的資料類型都要相容,比如如果要更改char為decimal,那麼原先的欄位就不能出現字元,比如abcd等,只能出現資料型字元,比如1,2,3等。否則db2就報錯,說“格式不相容”。

(b)如果你要更改的只是size大小,而資料的類型不變,那麼要保證欄位是增加的,比如從char(5)到char(10),decimal(18,2)到decimal(19,2),這樣是沒問題的。

如果想縮減欄位的size,那麼就要保證所有表中的資料都小於你縮減後的值,否則也會報錯。此時如果有需求必須要改變,那麼就只能刪除列,然後重建列了。當然重建表也可以。

(3)刪除列

alter table emp drop column sex;

(4)為欄位添加預設值

alter table emp add sex char(1);

alter table emp alter column sex set default 'm';

(5)添加帶預設值的欄位

alter table emp add addr char(20) not null with default 'beijing';

 

另外要注意的是,無論是添加,刪除,還是更改欄位的時候,為了保險起見,最好都運行一下reorg命令

reorg table table_name;

否則可能會造成其他動作時報錯。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.