修改数据库中表的id 50

数据库中有二三十张表,而且关系错中复杂,比如这表id是那表的外键,那表id又是另外一张表的外键。而且这些表里面都有上万的数据记录。现在我要修改这些表的主键(id)生成方式... 数据库中有二三十张表,而且关系错中复杂,比如这表id是那表的外键,那表id又是另外一张表的外键。而且这些表里面都有上万的数据记录。现在我要修改这些表的主键(id)生成方式,但修改后这些表的关系不能错乱,那上万条数据通过主外建建立的关系也不能发生错乱。这要怎么实现????
以前的数据的id值也要换
展开
 我来答
SQL的艺术
2014-08-13 · SQL写多了就会在追求极致
SQL的艺术
采纳数:2040 获赞数:3322

向TA提问 私信TA
展开全部

思路:

1、首先搞清楚所有表的主外键关系

2、取消全部表的主键自增标识列,方便你后续的直接修改ID

例如:

exec sp_configure 'allow updates',1
reconfigure with override
GO
----取消标识列标记
update syscolumns set colstat = 0 where id = object_id('表名') and colstat = 1
GO
----恢复标识列标记
update syscolumns set colstat = 1 where id = object_id('表名') and name = '标识列名称'

3、写个SQL脚本,修改ID,在修改的时候,一并更新全部表里的此ID值

例如:

declare @old_id as int,@new_id as int
select @old_id=12,@new_id=123
update 表名1 set id=@new_id where id=@old_id
update 表名2 set id=@new_id where id=@old_id
update 表名3 set id=@new_id where id=@old_id
.....
update 表名n set id=@new_id where id=@old_id
追问
不是这种,没考虑到数据关系
仙戈雅3n
推荐于2018-04-10 · TA获得超过5790个赞
知道大有可为答主
回答量:2398
采纳率:75%
帮助的人:875万
展开全部
工程量会很大。步骤是找到某表的外键有那些,然后主键修改后紧接着修改它的外键里对应的表的值。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
文质彬彬还悉心丶布丁5509
2014-08-13 · TA获得超过124个赞
知道答主
回答量:189
采纳率:0%
帮助的人:52.3万
展开全部
你是要修改数据库里面, 某个表的 自动递增列的 开始id ?

那你那个表里面, 当前有没有数据?

如果已经有数据了, 你再从1开始, 那后面就要出错了。
如果表是空表, 没有数据的, 那么可以

TRUNCATE TABLE 表名字

通过彻底清空 指定表的方式, 来重置那个 自动递增的当期值为 1

注:以上处理方式

对于 SQL Server 数据库的 identity (1,1)
或者 MySQL 的 AUTO_INCREMENT 是有效的。

如果是 Oracle 数据库的话, 你可能需要去重新创建序列号对象。
追问
我要修改所有表的id,但也不是递增值得问题,我是要把所有表的id全部都换掉,但不影响数据记录之间通过主外键建立的关系
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Yaphets丶飞ER
2018-01-10
知道答主
回答量:1
采纳率:0%
帮助的人:901
展开全部
解决了吗?我也遇到了这样的问题?解决了可以告诉我下吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式