【问题标题】:How to migrate MYSQL database with having different column name?如何迁移具有不同列名的 MYSQL 数据库?
【发布时间】:2022-01-26 07:12:56
【问题描述】:

我有两个数据库old.sql & new.sql

我在new.sql 中有一个名为user 的用户表。和users 中的old.sql

user 的表结构来自new.sql

--
-- Table structure for table `user`
--
DROP TABLE IF EXISTS `user`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `password` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `firstName` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `lastName` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `phoneNumber` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `role` enum('USER','ADMIN') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'USER',
  `createdOn` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `User_email_key` (`email`),
  UNIQUE KEY `User_phoneNumber_key` (`phoneNumber`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

users 来自old.sql

DROP TABLE IF EXISTS `users`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `users` (
  `id` int NOT NULL AUTO_INCREMENT,
  `roleId` int NOT NULL,
  `firstName` varchar(255) DEFAULT NULL,
  `lastName` varchar(255) DEFAULT NULL,
  `email` varchar(255) NOT NULL,
  `password` varchar(255) DEFAULT NULL,
  `status` tinyint(1) DEFAULT '1',
  `resetPasswordExpires` datetime DEFAULT NULL,
  `resetPasswordToken` varchar(255) DEFAULT NULL,
  `createdAt` datetime NOT NULL,
  `updatedAt` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`),
  KEY `roleId` (`roleId`),
  CONSTRAINT `Users_ibfk_1` FOREIGN KEY (`roleId`) REFERENCES `roles` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=884 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

现在我想将用户从旧数据库迁移到新数据库。 这只是一张表,我们有很多表要迁移数据。

我怎样才能做到这一点?

我们还在新数据库中进行了规范化,例如 old.sql 一个表分隔在新数据库中的 2 或 3 个新表中。

这些数据库位于同一个 MySQL 实例上。

【问题讨论】:

  • 好的,谢谢。我变了。有什么解决办法吗?
  • 迁移时使用哪个工具?
  • 如果要迁移,为什么表不同?是mysql 数据库上的user 表吗?
  • 我没有使用任何工具,因为表名不同。 @jarlh
  • 据我所知,您需要编写一个用于迁移数据的程序,您将在其中考虑您需要的所有细节

标签: mysql sql database database-migration


【解决方案1】:

你可以使用一个简单的脚本,比如:

INSERT INTO
  user (id, email, password, firstName, lastName, phoneNumber, role, createdOn)
SELECT
  id, email, password, firstName, lastName, null, IF(roleId = 1, 'ADMIN', 'USER'), created
FROM users;

只需为条件设置正确的 roleId,如果需要新的,请删除 id。

【讨论】:

    【解决方案2】:

    数据传输实现的小例子,附注:DEMO fiddle

    【讨论】:

      猜你喜欢
      • 2015-12-01
      • 2011-08-08
      • 2021-07-14
      • 2012-03-10
      • 1970-01-01
      • 2012-06-05
      • 2022-08-24
      • 1970-01-01
      • 2012-07-27
      相关资源
      最近更新 更多