修改数据库中表的id

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了修改数据库中表的id相关的知识,希望对你有一定的参考价值。

数据库中有二三十张表,而且关系错中复杂,比如这表id是那表的外键,那表id又是另外一张表的外键。而且这些表里面都有上万的数据记录。现在我要修改这些表的主键(id)生成方式,但修改后这些表的关系不能错乱,那上万条数据通过主外建建立的关系也不能发生错乱。这要怎么实现????
以前的数据的id值也要换

思路:

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追问

不是这种,没考虑到数据关系

参考技术A 工程量会很大。步骤是找到某表的外键有那些,然后主键修改后紧接着修改它的外键里对应的表的值。 参考技术B 你是要修改数据库里面, 某个表的 自动递增列的 开始id ?

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

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

TRUNCATE TABLE 表名字

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

注:以上处理方式

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

如果是 Oracle 数据库的话, 你可能需要去重新创建序列号对象。追问

我要修改所有表的id,但也不是递增值得问题,我是要把所有表的id全部都换掉,但不影响数据记录之间通过主外键建立的关系

参考技术C 解决了吗?我也遇到了这样的问题?解决了可以告诉我下吗?

plsql中表的列能取中文别名吗

参考技术A 答案1:如下语句: select a.rowid_new,b.rowid_old,a.audi_str 新系统套餐,b.user_dinner 旧系统套餐,a.subscription_id,a.service_num1,a.start_time,a.call_duration,a.cfee 新系统基本费,b.cfee 旧系统基本费,a.result 原因 from gsm_cdr_charge_result a,gsm_cdr_charge_old b where a.service_num1 = b.service_num and a.start_time = b.start_time and a.flag = 2 order by a.user_dinner asc ; 执行时提示错误:ORA-00923:FROM keyword not found where expected. 这个错误是不是因为其中列的中文别名引起的? 是不是PLSQL中不能使用中文别名。有知道的请回复,谢谢。答案2:中文名没关系 错误是没找到FROM关键字,这个就是你查询用的语句吗? 不过看起来是没问题 替你检查了一遍,真的没问题 是不是你这段东西没发全?你直接执行的这一句还是从哪个函数或者过程里拷贝出来的? 应该是你某个位置少写了个逗号,仔细检查一下,不过你这句我还真没发现少啥了相关知识:更多本回答被提问者采纳

以上是关于修改数据库中表的id的主要内容,如果未能解决你的问题,请参考以下文章

liferay修改service.xml 中表结构后,数据库中表不发生改变

修改MySQL数据库中表和表中字段的编码方式的方法

修改MySQL数据库中表和表中字段的编码方式的方法

mysql基础,数据库中表的数据操作。

PySpark - 如何根据 CoordinateMatrix 中表示的相似点获取前 k 个 ID?

如何将 id 传递给 React Js 中表中的每个 <td>?