我也检查了其他问题,没有一个像这个。
众所周知,innodb有一个功能。例如,如果我想调用记录的id,那么指向前一个ID的所有其他表将会神奇地更新。
如果我想合并2条记录呢?
说我有2个企业。
他们有2个身份证。
我想将它们合并为一个。我也想使用innodb awesome功能来自动更改内容。
我不能只将其中一个ID更改为另一个ID。或者我可以吗?
如何在数据库中合并2个simmilar记录?
当然,合并记录的实际内容将是商业决策。
基本上我只是不想一个接一个地指向所有其他表。我认为更新规则是有原因的。有没有办法我只是将slaveID更改为masterID,保持master中的所有数据相同,然后让数据库本身(而不是我的程序)重新指定所有指向slaveID指向masterID的表?当然,slaveID的记录无论如何都会消失。
例如,使用普通的mysql引擎,您可以更改ID,然后您必须遍历所有指向旧ID的表以指向新ID。使用innodb,该重新创建由数据库引擎本身完成。哪个很酷。为什么有人会使用非innodb引擎。
我想做同样的事情但是要合并。
答案 0 :(得分:1)
尝试将记录主键设置为已存在的值只会导致键违规错误。虽然这在第一眼看上去很简单,但它有副作用:你不能使用ON UPDATE CASCADE
来合并两个记录 - 它根本不起作用。
如果你有可能改变架构,你可以使用旧的但很好的重定向技巧:
(假设您的ID是正面的,可能是无内容的)
redirect int not null default 0
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
UPDATE tablename SET redirect=<id_of_master> WHERE id=<id_of_slave>
tablename_view
而不是tablename