修改informix数据库主键

修改informix数据库表的主键,需要首先删除主键,再新建。
第一步:
查出该主键的约束的名字,查约束名SQL语句如下(TabName为表名):

SELECT constrname FROM sysconstraints
WHERE tabid = (SELECT tabid FROM systables
WHERE tabname = ‘TabName’) and constrtype ='P' ;

{
constrtype ='P' 是主键约束,还有
C 检查(Check)
R 引用(外键)(Reference,Foreign Key)
U 唯一 *** (Unique)
N 非空(Not Null)
}


第二步:
删除主键(TabName为表名,u144_58为上一步查出的约束名),SQL语句如下:

alter table TabName drop constraint u144_58;


第三步:
新建主键(主键为policyno,classcode,loandate),SQL语句如下:
>>

ALTER TABLE TabName
ADD CONSTRAINT PRIMARY KEY (policyno,classcode,loandate)
CONSTRAINT u144_58;

{u144_58约束名可自定,必需唯一}


由于整个修改主键过程无法纯用SQL脚本完成,特写了一个SHELL脚本。

修改数据库主键 SHELL 脚本,需要informix的dbaccess支持:

#!/bin/sh
#################################################
#功能: informix 修改数据库主键
#################################################

chg_primary_key()
{
    if [ $# -ne 2 ];then
        echo "<ERROR> Uargs: chg_primary_key tableName primaryKey /n[$*]"
        exit 1
    fi 

    _tableName="$1"
    _primaryKey="$2"

    alias dbaccess='dbaccess'

    #查出老的主键约束名
    _constrName=`dbaccess remotedb 2>> tmp.txt << EOF | xargs | cut -d ' ' -f2
    select constrname from sysconstraints where constrtype='P'
    and tabid= ( select tabid from systables where tabname = '$_tableName' ) ;
EOF `

    if [ -z "$_constrName" ] || [ "$_constrName" = "constrname" ];then
        echo "<ERROR>主键名查出为空!"
        exit 1
    fi 

    #修改主键
    dbaccess remotedb << EOF
    alter table $_tableName drop constraint $_constrName;
    alter table $_tableName add constraint
    primary key ($_primaryKey) constraint $_constrName;
EOF

}

#debitrec修改主键为(policyno,classcode,loandate)
chg_primary_key debitrec policyno,classcode,loandate
#borrapp修改主键为(id,policyno,classcode,bdate)
chg_primary_key borrapp id,policyno,classcode,bdate
#quittask修改主键为(taskid,policyno,classcode)
chg_primary_key quittask taskid,policyno,classcode

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值