2016-03-31 13 views
1

編輯: 我只能用一行格式存儲文件的記錄。Mysql - 加載數據信息格式化日期

0,2016-03-31-13:48:16.435,0.705486,1,F2221-222 

但是,當我嘗試存儲2行或更多行的文件時出現錯誤。

0,2016-03-31-13:48:16.435,0.705486,1,F2221-222 
1,2016-03-31-13:48:16.435,0.56606096,2,F2221-222 

我使用:

load data infile 'flight3021' 
into table signal_times 
fields terminated BY ',' 
(signaltime_id,@var1,value,signal_id,flight_number) 
SET time = STR_TO_DATE(@var1,'%Y-%m-%d-%H:%i:%S.%f') 

錯誤:

Cannot add or update a child row: a foreign key constraint fails (`cmsdbdev`.`signal_times`, CONSTRAINT `FK_r2e4qo5suuwrlkr08ryebv14i` FOREIGN KEY (`flight_number`) REFERENCES `flight_data` (`flight_number`)) 

奇怪的是,如果我這樣做2線它工作的正常插入,所以其與FK相關約束違規錯誤。我認爲它必須是負載數據泄漏的問題。

謝謝。

+0

您可以發佈您表的結構?你的桌子上有觸發器嗎? – wchiquito

回答

1

'2016-03-31-13:16:24.861'被載入爲「'2016-03-31-13:16:24.861'」,這就是爲什麼它不是有效的datetime

我使用TRIM函數來嘗試解決這個問題。

對於多行,需要lines terminated by

load data infile '/home/jinggang.sjg/data1' 
into table signal_times 
fields terminated BY ',' ESCAPED BY "" 
lines terminated by '\r\n' 
(signaltime_id,@var1,value,signal_id,flight_number) 
SET time = STR_TO_DATE(@var1,'%Y-%m-%d-%H:%i:%S.%f'); 
+0

感謝它的完美!如果我看得很清楚,時間是正確的。關於使用TRIM,你的意思是什麼?時間應該在文件中的引號之間? '2016-03-31-13:16:24.861'。我不讓任何空間。 –

+0

正常的日期時間爲'2016-03-31-13:16:24.861',但在這裏它將被加載爲''2016-03-31-13:16:24.861'「。 –

1

嘗試:

文件:'/path/to/file/flight3021'

0,2016-03-31-13:48:16.435,0.705486,1,F2221-222 
1,2016-03-31-13:48:16.435,0.56606096,2,F2221-222 

MySQL命令行:

mysql> SELECT VERSION(); 
+-----------+ 
| VERSION() | 
+-----------+ 
| 5.7.11 | 
+-----------+ 
1 row in set (0.00 sec) 

mysql> DROP TABLE IF EXISTS `signal_times`; 
Query OK, 0 rows affected (0.00 sec) 

mysql> CREATE TABLE IF NOT EXISTS `signal_times` (
    -> `signaltime_id` INT UNSIGNED, 
    -> `time` TIMESTAMP(3), 
    -> `value` DECIMAL(10,8), 
    -> `signal_id` INT UNSIGNED, 
    -> `flight_number` VARCHAR(10) 
    ->); 
Query OK, 0 rows affected (0.00 sec) 

mysql> LOAD DATA INFILE '/path/to/file/flight3021' 
    -> INTO TABLE `signal_times` 
    -> FIELDS TERMINATED BY ',' 
    -> LINES TERMINATED BY '\r\n' 
    -> (`signaltime_id`, 
    -> @`var1`, 
    -> `value`, 
    -> `signal_id`, 
    -> `flight_number` 
    -> ) 
    -> SET `time` = STR_TO_DATE(@`var1`,'%Y-%m-%d-%H:%i:%S.%f'); 
Query OK, 2 rows affected (0.00 sec) 
Records: 2 Deleted: 0 Skipped: 0 Warnings: 0 

mysql> SELECT 
    -> `signaltime_id`, 
    -> `time`, 
    -> `value`, 
    -> `signal_id`, 
    -> `flight_number` 
    -> FROM 
    -> `signal_times`; 
+---------------+-------------------------+------------+-----------+---------------+ 
| signaltime_id | time     | value  | signal_id | flight_number | 
+---------------+-------------------------+------------+-----------+---------------+ 
|    0 | 2016-03-31 13:48:16.435 | 0.70548600 |   1 | F2221-222  | 
|    1 | 2016-03-31 13:48:16.435 | 0.56606096 |   2 | F2221-222  | 
+---------------+-------------------------+------------+-----------+---------------+ 
2 rows in set (0.00 sec)