繁体   English   中英

如何创建 MySQL 表的备份,其中原始表具有其中一列的“设置”数据类型?

[英]How to create a backup of a MySQL table where the original table has a "set" data type for one of the columns?

在更新原始表中的一些数据之前,我需要在 MySQL 中创建表备份。 服务器正在运行 MySQL 5.6。 计划是创建一个新的空白表和 select 使用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    |       |
+------------------+-------------------------------------------------+------+-----+---------+-------+

尝试这个:

CREATE TABLE Organization_backup SELECT * FROM Organization;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM