我必须在新数据库中填写条目。旧架构如下所示:
+------------------------+----------+------+-----+---------+----------------+
| 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
答案 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 来阅读文件并插入数据,这是其他可能性。