日期:2014-05-16  浏览次数:20546 次

修改主键的类型(数据库)
SQL SERVER 修改把主键的类型从int型改成string型

先删除主键,然后修改主键对应字段的类型,最后从新添加主键

ALTER TABLE S_UNIT DROP CONSTRAINT PK_S_UNIT;
ALTER TABLE S_UNIT ALTER COLUMN ID varchar(32) not null;
alter table S_UNIT add constraint PK_S_UNIT primary key(ID);


如果其它表的外键是这个主键的话,要先删除这个表的外键关联
ALTER TABLE S_HONOR DROP CONSTRAINT FK_S_HONOR__S_UNIT;

然后修改变的外键所对应的字段
ALTER TABLE S_HONOR ALTER COLUMN UNIT_ID varchar(32);

最后添加外键关联
alter table S_HONOR add constraint FK_S_HONOR__S_UNIT     foreign key(UNIT_ID) references S_UNIT(ID) ON DELETE  CASCADE;

ORACLE数据库修改

先删除主键,然后修改主键对应字段的类型,最后从新添加主键
ALTER TABLE S_UNIT DROP CONSTRAINT PK_S_UNIT;
ALTER TABLE S_UNIT MODIFY ID varchar(32);
alter table S_UNIT add constraint PK_S_UNIT primary key(ID);

如果其它表的外键是这个主键的话,要先删除这个表的外键关联
ALTER TABLE S_HONOR DROP CONSTRAINT FK_S_HONOR__S_UNIT;

然后修改变的外键所对应的字段
ALTER TABLE S_HONOR MODIFY UNIT_ID varchar(32);

最后添加外键关联
alter table S_HONOR add constraint FK_S_HONOR__S_UNIT     foreign key(UNIT_ID) references S_UNIT(ID) ON DELETE  CASCADE;


注意:oracle修改字段的时候,如果里面有值的话,要先就行处理
alter table S_LOGIN_LOG add temp_id varchar(32);
update S_LOGIN_LOG set temp_id=id;
alter table S_LOGIN_LOG drop column id;
alter table S_LOGIN_LOG rename column temp_id to ID;