[英]Insert database entries in different format
我必須在新數據庫中填寫條目。 舊模式如下所示:
+------------------------+----------+------+-----+---------+----------------+
| 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 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
您是否知道可以指定要插入的列。 例
INSERT INTO my_table (col_a, col_c, col_b) VALUES ('a', 'c', 'b');
因此,我認為您需要做的就是明確指定要插入的列。 它們可以以任何順序排列,而不管表中的順序如何。
您也可以一次插入多行,如下所示:
INSERT INTO my_table (col_a, col_c, col_b) VALUES
('a', 'c', 'b'),
('b', 'c', 'a'),
... ,
('b', 'a', 'c');
我不知道您的SGBD,但是使用oracle可以執行類似的操作:
INSERT INTO tbl_temp2 (fld_id)
SELECT tbl_temp1.fld_order_id
FROM tbl_temp1
WHERE tbl_temp1.fld_order_id > 100;
對於您的情況,我建議您在SGBD對其進行管理的情況下編寫塊PL / SQL。
如果您不想打擾代碼,還可以使用talend來讀取文件並插入數據!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.