建表、刪除表:mysql? oracle? db2基本相同
create table test(id integer,name varchar(20),address varchar(20));
(oracle 多用varchar2,但也支持varchar)
drop table test;
但是修改表就有很大的不同了,如下:
1,增加列:相同
alter table test add mail varchar(128);
2,刪除列:
oracle 與mysql相同:alter table test drop column mail;
db2????????????? :不提供刪除列功能(解決辦法是刪除表,重建)
3,更改列名
oracle : alter table test rename column mail to mail2;
mysql? : alter talbe test change mail mail2 varchar(128);
db2??? : 不提供更改列名功能(解決辦法同刪除,或者通過(guò)建立一個(gè)新視圖解決)
4,更改列類(lèi)型
oracle :alter table test modify column (mail2 integer);
mysql? :alter table test modify column mail2 integer;
db2??? :alter table test alter mail varchar(256) 只可以加寬,不能更改類(lèi)型
5,更改列的限制(主鍵、非空)
db2?? :alter table test alter mail null/not null;
mysql :alter table test modify mail2 varchar(29) not null;
oracle:alter table test modify mail2 null/not null;
關(guān)于db2不提供解決辦法,參考這里
http://www-128.ibm.com/developerworks/cn/db2/library/techarticles/0207adamache/0430_adamache3.html
截取部分原文
-------------------------------------------------------------------------------
DROP COLUMN:DB2 不允許您刪除一個(gè)列。我可以想到您希望刪除列的三個(gè)理由:
回收空間:如果您希望這樣做,可以導(dǎo)出您希望保存的數(shù)據(jù),刪除那個(gè)表,用您需要的那些列重新創(chuàng)建表,然后裝入
這個(gè)表。這是否代價(jià)高昂?當(dāng)然是,但是回收空間需要這樣或者 REORG TABLE。這些本來(lái)就是代價(jià)高昂的操作。
這個(gè)列不再是行的邏輯部分:例如,您意識(shí)到您的雇員可能有兩個(gè)地址,并且停止跟蹤雇員(employee)表中的地址
(雇員表和雇員地址(employee_address)表之間現(xiàn)在有 n:m 關(guān)系)。在雇員表上創(chuàng)建一個(gè)不包含地址列的視圖。
如果您真的要用新奇的方法,可以使用 RENAME TABLE 命令給基表一個(gè)新的名稱(chēng),然后將原始表名作為該視圖的
名稱(chēng)。您的視圖也可以連接雇員表中的有用列和從雇員地址獲得的地址。現(xiàn)在我們回到了關(guān)系的正道。
列變寬了。如果它是 VARCHAR,那您運(yùn)氣不錯(cuò)。DB2 允許您將 VARCHAR 列最多加寬至表空間(tablespace)
中定義的頁(yè)大小寬度(缺省的 4K 頁(yè)大小為 4,005,而在 32K 頁(yè)上最多為 32,672):
---------------------------------------------------------------------------------
但是過(guò)程中問(wèn)一個(gè)朋友,得到的結(jié)論是可以改,矛盾啊繼續(xù)找資料:
http://www-1.ibm.com/support/docview.wss?uid=swg21004049
部分截取原文
-------------------------------------------------------------------------------
In DB2? Universal Database? (DB2 UDB) Version 8.2, the Control Center automates
the process of altering a table where recreation of the table is necessary,
saving the user from performing a lengthy set of manual steps. Specifically,
the Control Center will automate the following operations: rename a column;
drop a column; change the data type of a column; change the length, scope,
or precision values for a column; change whether a column is nullable. If necessary,
the table that is being changed will be dropped and recreated, and DB2 UDB will
help the user restore any dependent objects and transform the existing data into
the target data type of each remaining column.
You cannot drop a column in DB2 UDB Version 8.1 or earlier. There are work-arounds.
?For example, you can increase the width of a VARCHAR column up to the largest
?column width supported by the page size used by the table (4005 bytes by default,
? but possibly as large as 32672 byes on 32K pages). The page size is chosen
? when the table space is created. To handle more complex changes:
? -----------------------------------------------------------------------------
? 原來(lái)DB2 UDB Version 8.1 or earlier不支持,8.2才開(kāi)始支持。
?