mysql - 如何有效地迁移和同步表?

标签 mysql

我有一个表 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/

相关文章:

mysql - 如何更改mysql数据库中的字体以存储unicode字符

mysql - SQL 请求 LEFT JOIN

php - SQL -> CSV(utf8-BOM header 无法正常工作)

php - 如何使用mysql创建用户等级?

mysql - 选择查询的异常 MySQL 行为

php - 日期转换为数据库日期

php - php 中的硬编码数字如何转换为数据库中的另一个数字?奇怪的

javascript - OnClick 按钮从数据库获取并实时显示在输入字段上

mysql - Doctrine2 选择生日范围

mysql - 查询帮助? MySQL、LEFT JOIN、GROUP BY、缺失数据