修改表增加字段預設值default

2021-06-18 13:13:48 字數 1038 閱讀 9122

對個生產庫的表增加1個字段.欄位型別是int型, 表資料有2千萬條, alter table table_name add xxoo number(4) default  0 ;

因此 不僅要修改字典,還要重新整理全部資料.

1) 在alter sql中有帶預設值,oracle會直接重新整理全部的記錄。

2) 在alter sql中沒有帶預設值,oracle只會影響到後來的記錄。

alter table table_name add xxoo number(4) default null;

table altered

executed in 0.062 seconds

帶有default null 就可以了

alter table table_name add xxoo number(4) default 0;

table altered

executed in 1.625 seconds

原來的話 要更新所有的行,會導致undo段占用

使用語句alter table a add test number(10) default 0;更新乙個大表中字段時,表有四個分割槽,資料達到幾十億行,增加乙個字段竟然要幾個小時的時間,修改語句加上nologging ,怎麼沒有作用呢?去找是不是哪有鎖了呢,使用語句 select * from dba_locks where lock_id1=33784;發現session_id為14的一直在執行,那麼他在執行什麼呢!查詢一下吧。

使用語句:

select a.sid,a.username,c.sql_text from v$session a, dba_locks b,v$sqlarea c

where b.lock_id1=33784 and a.sid=b.session_id

and a.sql_address=c.address;

哦,原來他在update test 字段值為0.至此總結到,原來alter之後做的竟然是update,也明白了為什麼undo表空間會爆漲。去掉default 0,呵呵,很快就ok了。

建議沒有必要時慎用default

Mysql 修改字段預設值

mysql 5.7.13 問題描述 建表的時候,users info表的role id欄位沒有預設值,後期發現註冊的時候,需要提供給使用者乙個預設角色,也就是給role id欄位乙個預設值。當前users info表的role id 在建立表的時候,沒有設定預設值,資料庫自動設定為空。原先建表語句 ...

mysql原表增加欄位且設定預設值及修改字段預設值

增加欄位及注釋 alter table sr zjff main add zjbzjxbj int 1 default 0 comment alter table sr main ylyj add yljzje double 20,2 default 0.00 comment 醫療救助金額 修改字段...

SQL修改字段預設值方法

declare tablename varchar 30 declare fieldname varchar 50 declare sql varchar 300 set tablename dncdeta1 set fieldname description set sql select sql ...