以不同格式插入数据库条目

时间:2015-03-26 16:05:09

标签: mysql

我必须在新数据库中填写条目。旧架构如下所示:

+------------------------+----------+------+-----+---------+----------------+
| Field                  | Type     | Null | Key | Default | Extra          |
+------------------------+----------+------+-----+---------+----------------+
| id                     | int(11)  | NO   | PRI | NULL    | auto_increment |
| trainee_id             | int(11)  | NO   | MUL | NULL    |                |
| date                   | date     | NO   |     | NULL    |                |
| duration               | int(11)  | NO   |     | NULL    |                |
| documentationReference | longtext | YES  |     | NULL    |                |
| educationDepartment    | longtext | YES  |     | NULL    |                |
| completedtasks         | longtext | NO   |     | NULL    |                |
| yearOfTraining         | int(1)   | YES  |     | NULL    |                |
+------------------------+----------+------+-----+---------+----------------+

所以现在我的insert语句如下所示:

INSERT INTO `report_completedtask`
      VALUES (997,
              3,
             '2015-01-23',
             8,
             NULL,
             'Netzwerk und Sicherheit',
             'Berufsschule',
             1);

但是因为我的新架构看起来像这样:

+----------------------+----------+------+-----+---------+----------------+
| Field                | Type     | Null | Key | Default | Extra          |
+----------------------+----------+------+-----+---------+----------------+
| id                   | int(11)  | NO   | PRI | NULL    | auto_increment |
| trainee_id           | int(11)  | NO   | MUL | NULL    |                |
| task                 | longtext | NO   |     | NULL    |                |
| date                 | date     | NO   |     | NULL    |                |
| year_of_training     | int(11)  | NO   |     | NULL    |                |
| duration             | int(11)  | YES  |     | NULL    |                |
| documentation        | longtext | YES  |     | NULL    |                |
| education_department | longtext | YES  |     | NULL    |                |
+----------------------+----------+------+-----+---------+----------------+

我需要以下插入语句结构:

INSERT INTO `report_completedtask`
     VALUES (997,
             3,
             'Netzwerk und Sicherheit',
             '2015-01-23',
             1,
             8,
             NULL,
             'Berufsschule');

以下是真正的问题:我有一个巨大的文件,其中包含超过1000行的旧条目。有什么办法可以为新架构重新安排它们并更改文件吗?

编辑:我现在采用了dan08的方法并将其与一个简单的vi命令结合起来:

:%s/VALUES/(id,trainee_id,date,duration,documentation,education_department,task,year_of_training) VALUES/g

有时它太简单了:D

2 个答案:

答案 0 :(得分:2)

您知道吗您可以指定要插入的列。实施例

INSERT INTO my_table (col_a, col_c, col_b) VALUES ('a', 'c', 'b');

所以我认为您需要做的就是明确指定要插入的列。它们可以按任何顺序排列,无论表中的顺序如何。

你也可以一次INSERT多行:

INSERT INTO my_table (col_a, col_c, col_b) VALUES 
  ('a', 'c', 'b'), 
  ('b', 'c', 'a'), 
  ... , 
  ('b', 'a', 'c');

答案 1 :(得分:0)

我不知道你的SGBD,但是 oracle 你可以做类似的事情:

INSERT INTO tbl_temp2 (fld_id)
SELECT tbl_temp1.fld_order_id
FROM tbl_temp1
WHERE tbl_temp1.fld_order_id > 100;

在你的情况下,我建议你写一个块PL / SQL,如果你的SGBD管理它。

如果您不想打扰代码,可以使用 talend 来阅读文件并插入数据,这是其他可能性。