我还检查了其他问题,没有一个和这个问题很像。
正如我们所知,innodb有一个特性。例如,如果我想引导一条记录的id,那么指向前一个ID的所有其他表都会被神奇地更新。
如果我想合并两条记录呢?
假设我有两家公司。
他们有两个身份证。
我想把它们合并成一个。我也想使用innodb强大的功能来自动改变事情。
我不能简单地将一个ID更改为另一个id。或者我可以吗?
在数据库中合并两个相似的记录你会怎么做?
当然,实际进入合并记录的将是业务决策。
基本上,我只是不想一个接一个地指出所有其他表。我认为更新规则的存在是有原因的。有没有一种方法,我只需将slaveID更改为masterID,保持主控中的所有数据不变,然后让数据库本身(而不是我的程序)将所有指向slaveID的表重定向到masterID?当然,slaveID的记录无论如何都会消失。
例如,使用普通的mysql引擎,您可以更改ID,然后您必须遍历所有指向旧ID的表来指向新ID。对于innodb,重定向是由数据库引擎本身完成的。这还挺酷的。为什么会有人使用非innodb引擎呢?
除了合并,我也想做同样的事情。
发布于 2012-05-24 17:24:26
尝试将记录主键设置为已经存在的值只会导致键冲突错误。虽然乍一看这很简单,但它有一个副作用:您不能使用ON UPDATE CASCADE合并两条记录-它根本不起作用。
如果您有可能更改模式,您可以使用旧的但很好的重定向技巧:
(假设您的ID是正数,也许可以取消对int的签名)
。
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
https://stackoverflow.com/questions/10734414
复制相似问题