Oracle、MySQL、達夢數據庫新增修改刪除字段

一  Oracle

假如有一個表名爲tb,字段段名爲name,數據類型nchar(20)。

1. 假設字段數據爲空,則不管改爲什麼字段類型,可以直接執行

alter table tb modify (name nvarchar2(20));

2. 假設字段有數據,則改爲nvarchar2(20)可以直接執行

alter table tb modify (name nvarchar2(20));

3. 假設字段有數據,則改爲varchar2(40)執行時會彈出:“ORA-01439:要更改數據類型,則要修改的列必須爲空”,這時要用下面方法來解決這個問題

/*修改原字段名name爲name_tmp*/
alter table tb rename column name to name_tmp;
 
/*增加一個和原字段名同名的字段name*/
alter table tb add name varchar2(40);
 
/*將原字段name_tmp數據更新到增加的字段name*/
update tb set name=trim(name_tmp);
 
/*更新完,刪除原字段name_tmp*/
alter table tb drop column name_tmp;

4. 總結
 1)當字段沒有數據或者要修改的新類型和原類型兼容時,可以直接modify修改。
 2)當字段有數據並用要修改的新類型和原類型不兼容時,要間接新建字段來轉移。

二 MySQL

1. 增加字段

alter table table_name add column col_name_add varchar(20);

2. 修改字段名

alter table table_name change column col_name_old col_name_new varchar(20);

3. 修改字段類型和長度

alter table table_name modify col_name varchar(20);

4. 刪除某字段

alter table table_name drop column col_name;

三 達夢

示例

/** 修改原字段 T_CONTENT 爲 T_CONTENT_TEMP   注T_CONTENT類型爲varchar(4000)*/
alter table "數據庫名"."表名" rename column T_CONTENT to T_CONTENT_TEMP;

/** 增加一個和原字段名稱相同的字段 T_CONTENT */
alter table "數據庫名"."表名" add T_CONTENT varchar(8000);

/** 將原字段 T_CONTENT_TEMP數據更新到增加的字段 T_CONTENT中 */
update "數據庫名"."表名" set T_CONTENT =trim(T_CONTENT_TEMP);

/** 更新完,刪除原字段 T_CONTENT_TEMP */
alter table "數據庫名"."表名" drop column T_CONTENT_TEMP;

commit;

注:(修改  新增  刪除)和oracle的基本相同,如上面的示例,如果都是varchar類型,可以直接修改,不需要上面name麻煩,如下所示:

alter table "數據庫名"."表名" modfiy T_CONTENT varchar(8000);

上面主要是想講varchar類型轉化爲text類型,但是報錯了,就試着使用替換字段的方法,但是也報錯了,除非在管理工具中改,不使用SQL語句,我沒轍了,但是方法是對的,可以借鑑,錯誤如下:

[執行語句1]:
alter table "數據庫名"."表名" modify T_CONTENT text;
執行失敗(語句1)
第1 行附近出現錯誤[-6160]:
數據類型的變更無效

1條語句執行失敗
alter table "數據庫名"."表名" add T_CONTENT text;
執行失敗(語句1)
第1 行附近出現錯誤[-3243]:
表[表名]中不能同時包含聚集KEY和大字段

1條語句執行失敗

 

 

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