DB2中修改列(column)的数据类型(Data Type)

在DB2中,由于各种原因如字段长度不够、类型不一致等,可能需要修改表中列的数据类型。在修改时,新类型必须是原始类型的castable类型,并非所有改动都需要REORG。例如,增加或减少VARCHAR等长度(保持末尾空格且无索引)可无需REORG。了解ALTER TABLE语法和可转换数据类型对于顺利进行此类操作至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

无论是开发人员,或者数据库管理员,无论我们如何努力,如何小心,都难免会需要更改表子段的类型。 主要有以下原因:

  •  字段长度不够用
  • 字段类型和本地数据库的其它表相同业务含义的字段没有保持一致
  • 字段类型和外部系统相同业务含义的字段没有保持一致

在DB2中如何修改字段类型:

基本语法: alter table <TABLE_NAME> alter column <COLUMN_NAME> set data type <NEW TYPE>

Examples:  
         alter table HR.EMPLOYEE alter column HOBBY set data type varchar(300);


注意: 修改后的新类型<NEW TYPE>相比修改前的数据类型,必须是castable(可转换,详细信息参考本文后面的官方文档,但是又一个重要的原则就是不能你让数据库为难,比如字段里有20个字节的数据,你非得转成10个字节那就不行,如果CHAR字段里含有‘aa',你非得转变成int,那也不行)的。一般来说,在修改字段类型之后都需要做REORG(数据重组)

           

      reorg table HR.EMPLOYEE with distribution and indexes all

 但是如下的改动不需要做reorg. (我比较懒,除非表特别大,一般做完这种表结构改动后都会做一遍reorg /runstats)

  •    增加VARCHAR, VARGRAPHIC, or VARBINARY的长度
  •    减少VARCHAR, VARGRAPHIC, or VARBINARY的长度,但是不需要删除这些字段最后的空格,并且在此字段上无索引。

在DB2中如何修改字段从空=>非空:


基本语法: alter table <TABLE_NAME> alter column <COLUMN_NAME> set <NOT NULL>

Examples:  
          alter table HR.EMPLOYEE alter column HOBBY set not null;


在DB2中如何修改字段从非空=>空:


基本语法: alter table <TABLE_NAME> alter column <COLUMN_NAME> drop not null

Examples:  
          alter table HR.EMPLOYEE alter column HOBBY drop not null;



详细ALTER TABLE 语法,请参考IBM DB2的Knowledge Center:

     https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000888.html

详细哪些数据类型到哪些数据类型是Castable的参考:

     https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0008478.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值