首页 > 解决方案 > 如何创建 MySQL 表的备份,其中原始表具有其中一列的“设置”数据类型?

问题描述

在更新原始表中的一些数据之前,我需要在 MySQL 中创建一个表备份。服务器正在运行 MySQL 5.6。计划是创建一个新的空白表并使用INSERT INTO ... SELECT ...

我曾经SHOW CREATE TABLE Organization;得到创建新空白Organization_backup表所需的语句。下面是原始表的示例表结构。

MySQL [db]> describe Organization;
+------------------+-------------------------------------------------+------+-----+---------+-------+
| Field            | Type                                            | Null | Key | Default | Extra |
+------------------+-------------------------------------------------+------+-----+---------+-------+
| ID               | char(6)                                         | NO   | PRI | NULL    |       |
| Plans            | set('plan1','plan2','plan3')                    | NO   |     | NULL    |       |
| CreatedTS        | datetime                                        | NO   |     | NULL    |       |
+------------------+-------------------------------------------------+------+-----+---------+-------+

我的插入语句非常简单:

INSERT INTO Organization_backup (ID, Plans, CreatedTS)
SELECT ID, Plans, CreatedTS FROM Organization;

但是,当我随后比较不匹配数据的表时,我可以看到 Plans 值不匹配。特别是,一个组织可以是多个计划的一部分,并且我相信生成的具有逗号分隔值的数据子集在将数据插入备份表时会导致问题。

例子SELECT ID,Plans,CreatedTS FROM Organization where ID = 'ORG1';

结果:

+---------+----------------------+---------------------+
|    ID   |       Plans          | CreatedTS           |
+---------+----------------------+---------------------+
|  ORG1   |  plan1,plan2,plan3   | 2017-05-05 14:26:25 |
+---------+----------------------+---------------------+

与示例相比SELECT ID,Plans,CreatedTS FROM Organization_backup where ID = 'ORG1';

结果:

+---------+----------------------+---------------------+
|    ID   |         Plans        | CreatedTS           |
+---------+----------------------+---------------------+
|  ORG1   |     plan2,plan3      | 2017-05-05 14:26:25 |
+---------+----------------------+---------------------+

我无法弄清楚为什么没有正确插入集合中的第一个计划。

EDIT1: 对于那些询问的人,是的,除了名称之外,这两个表是相同的。

MySQL [db]> describe Organization_backup;
+------------------+-------------------------------------------------+------+-----+---------+-------+
| Field            | Type                                            | Null | Key | Default | Extra |
+------------------+-------------------------------------------------+------+-----+---------+-------+
| ID               | char(6)                                         | NO   | PRI | NULL    |       |
| Plans            | set('plan1','plan2','plan3')                    | NO   |     | NULL    |       |
| CreatedTS        | datetime                                        | NO   |     | NULL    |       |
+------------------+-------------------------------------------------+------+-----+---------+-------+

标签: mysql

解决方案


试试这个:

CREATE TABLE Organization_backup SELECT * FROM Organization;

推荐阅读