我有一个表 A,它有数百万条记录,并且还在不断增长。需要向表 A 添加一个新列并建立索引,但迁移这么大的表可能会很麻烦。因此,表 B 是在某个时刻从表 A 创建的,问题是如何有效地同步这两个表? 有多种情况会向表 A 添加新记录。
最佳答案
要“同步”两个表而不实际合并它们,您可以创建一个 UNION VIEW。 VIEW 可以像表一样用于计算、操作、数据存储等。这是假设两个表具有相同数量的行,如果不是,则需要创建主键和外键。
CREATE OR REPLACE VIEW viewname AS
SELECT * FROM TABLE_A
UNION ALL
SELECT * FROM TABLE_B
现在,如果两个表不共享相同数量的行,则两个表之间至少需要 1 个公共(public)字段(称为主键和外键),才能使用所需的主键和外键连接表使用这样的 JOIN:
CREATE OR REPLACE VIEW viewname AS
SELECT TableA.FieldName, TableB.FieldName, TableA.FieldName
FROM TableA
LEFT JOIN TableB
ON TableA.primarykeyField = TableB.foreignkeyField
UNION ALL
SELECT TableA.FieldName, TableB.FieldName, TableA.FieldName
FROM TableA
RIGHT JOIN TableB
ON TableA.primarykeyField = TableB.foreignkeyField
这取决于您想要什么类型的联接,但我认为 FULL JOIN 会给您最好的结果,MySQL 不支持 FULL JOIN,但使用 LEFT JOIN RIGHT JOIN 和 UNION ALL 会模仿相同的结果。
或者,如果您只是想将表 A 中的所有记录复制到表 B,则可以使用此方法。
INSERT INTO TableB
SELECT * FROM TableA;
关于mysql - 如何有效地迁移和同步表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39323023/