mysql - 将 SQLite 数据迁移到 MySQL 并管理/更新外键?

标签 mysql sql database sqlite synchronization

我正在开发一个 Android 应用程序,其中数据存储在 SQLite 数据库中。

我已与网络中的 MySQL 数据库同步,将设备中 SQLite 中存储的数据发送到该位置。

问题是我不知道如何维护表之间的关系,因为主键将用AUTO_INCRMENT更新,而外键保持不变,破坏了表之间的关系。

最佳答案

如果这是完整迁移,请不要在迁移期间使用自动增量 - 创建具有普通列的表。导入后使用 ALTER TABLE 更改模型。

对于增量同步,我看到的最简单的方法是在每个 MySQL 表中添加名为 sqlite_id 的附加列,并用原始 id 填充。然后您可以使用 UPDATE(带有联接)更新引用。

替代方案包括用于存储数据的临时表和用于配对的辅助表。对于更大的数据模型来说很乏味。

如果可能的话,我倾向于使用的方法是避免在这种情况下自动增量。我通常有一个带有四列的辅助表,如下所示:t_import(tablename,operationid,sqlite_id,mysqlid)。 流程如下:

  1. 将主键导入到 t_import 中。如果需要,可以使用 operationid 来分隔并行导入。

  2. 为数据表生成新键并将其存储到 t_import 表中。这可以与第一步结合起来。

  3. 导入实际数据并使用t_import设置新的主键并恢复关系。

这应该适用于我所知道的大多数场景。

关于mysql - 将 SQLite 数据迁移到 MySQL 并管理/更新外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33524292/

相关文章:

php - mySQL 需要一种更有效的方法来检查数据库并向数据库添加值

mysql - 安装 MySQL 后无法通过 SSH 连接到 Google Cloud VM

sql - 来自一个数据透视表的SQL FOR XML多层

mysql - 通过命令提示符将mysql导出到特定路径

php - MySQL删除表问题

MySQL 计数过滤

mysql - SQL:将多行转换为同一行中的列

mysql - 如何使三列成为我的主键

sql - 数据库设计: how to indicate if a column data is public or private

mysql - 从 MySQL 切换到 Oracle 会不会很困难?