Mysql更新主键问题

lx2662955454 2018-03-05 03:02:17
mysql 更新主键有什么坏处吗,有人建议我 是吧原来的数据删除,然后再插入。
在数据庞大的情况下(100w左右),优先考虑什么,是直接更新主键,还是删除再插入。(主键不是自增的是可以手动输入的字段)
...全文
963 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
主键如果是聚集索引,是不是可以设置 填充因子 减少插入 的IO量
shoppo0505 2018-03-06
  • 打赏
  • 举报
回复
引用 1 楼 yenange 的回复:
总数据是 100W 还是 要删除的数据有100W ? 还是建议先删除再插入: 主键在设计之初的本意就是不要改变的,不要轻易违背: 按我下面的, 中间出了错(比如插入时主键重复了)心里也有数, 要纠正也容易。

#1.  将需要删除的数据放到一个新表
create table tmp select * from tbName where 条件 ;
#2.  将原表中的数据删除
delete from tbName where 条件 ;
#3.  将 tmp 表中的数据插入到原表(主键按你的需求变动) :
insert into tbName (pkId, c1,c2,... )
select id+xxxx,c1,c2,...
from tmp;
#4. 确定没有问题, 删除 tmp 表
drop table tmp; 
如果你的表的主键没有被用作为外键,那么理论上来说是可以更新的。但是就如1楼所说,之所以定义为主键,就为了避免更改。 如果强行更改逐渐,可能会摧毁数据结构。
吉普赛的歌 版主 2018-03-05
  • 打赏
  • 举报
回复
总数据是 100W 还是 要删除的数据有100W ? 还是建议先删除再插入: 主键在设计之初的本意就是不要改变的,不要轻易违背: 按我下面的, 中间出了错(比如插入时主键重复了)心里也有数, 要纠正也容易。

#1.  将需要删除的数据放到一个新表
create table tmp select * from tbName where 条件 ;
#2.  将原表中的数据删除
delete from tbName where 条件 ;
#3.  将 tmp 表中的数据插入到原表(主键按你的需求变动) :
insert into tbName (pkId, c1,c2,... )
select id+xxxx,c1,c2,...
from tmp;
#4. 确定没有问题, 删除 tmp 表
drop table tmp; 

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧