首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在innoDB MySQL数据库中合并2条记录

如何在innoDB MySQL数据库中合并2条记录
EN

Stack Overflow用户
提问于 2012-05-24 17:10:46
回答 1查看 630关注 0票数 0

这与How to change ID in mysql相关

我还检查了其他问题,没有一个和这个问题很像。

正如我们所知,innodb有一个特性。例如,如果我想引导一条记录的id,那么指向前一个ID的所有其他表都会被神奇地更新。

如果我想合并两条记录呢?

假设我有两家公司。

他们有两个身份证。

我想把它们合并成一个。我也想使用innodb强大的功能来自动改变事情。

我不能简单地将一个ID更改为另一个id。或者我可以吗?

在数据库中合并两个相似的记录你会怎么做?

当然,实际进入合并记录的将是业务决策。

基本上,我只是不想一个接一个地指出所有其他表。我认为更新规则的存在是有原因的。有没有一种方法,我只需将slaveID更改为masterID,保持主控中的所有数据不变,然后让数据库本身(而不是我的程序)将所有指向slaveID的表重定向到masterID?当然,slaveID的记录无论如何都会消失。

例如,使用普通的mysql引擎,您可以更改ID,然后您必须遍历所有指向旧ID的表来指向新ID。对于innodb,重定向是由数据库引擎本身完成的。这还挺酷的。为什么会有人使用非innodb引擎呢?

除了合并,我也想做同样的事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-24 17:24:26

尝试将记录主键设置为已经存在的值只会导致键冲突错误。虽然乍一看这很简单,但它有一个副作用:您不能使用ON UPDATE CASCADE合并两条记录-它根本不起作用。

如果您有可能更改模式,您可以使用旧的但很好的重定向技巧:

(假设您的ID是正数,也许可以取消对int的签名)

  • 添加一个视图的字段:

代码语言:javascript
复制
CREATE VIEW tablename_view 
SELECT 
  -- repeat next line for every field apart from redirect
  IF(s.redirect>0,m.<fieldname>,s.<fieldname>
FROM tablename AS s
LEFT JOIN tablename AS m ON s.redirect=m.id

当您将一条记录(从)合并到另一条记录(主)中时,运行您的select查询以从

  • 而不是tablename

  • Create中进行选择,并使用维护脚本清除 slaves
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10734414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档