2016-03-31 13 views
1

編集: ファイルのレコードをこの形式の1行だけで保存できます。Mysql - データの読み込みInfile日付の書式設定

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との関連制約違反エラー。私はそれが負荷データinfileの問題でなければならないと思う。

ありがとうございました。

+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) 
関連する問題