大量のデータが含まれているcsvファイルがあり、それをmysqlテーブルにアップロードしたい。ただし、1つの列(プライマリID)を空にして、自分で編集できるようにしたいと考えています。 mysqlのドキュメントでは、列を指定できると記載されていますが、私の研究からは、csvファイルの列しか指定できないようです。
だからそれは可能です 特定する の列 テーブル
この例を確認してください:
# cat /tmp/db.txt
id,col1,col2
1,23,"dsafsdf"
2,-1,"ghfdhg"
7,9,"strsdrt"
# mysql test
mysql> CREATE TABLE `test` (
`id` int(11) NOT NULL,
`mycol1` int(11) DEFAULT NULL,
`mycol2` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`);
mysql> LOAD DATA INFILE '/tmp/db.txt'
INTO TABLE test FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
IGNORE 1 LINES (id, mycol1, mycol2);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
mysql> SELECT * FROM test;
+----+--------+---------+
| id | mycol1 | mycol2 |
+----+--------+---------+
| 1 | 23 | dsafsdf |
| 2 | -1 | ghfdhg |
| 7 | 9 | strsdrt |
+----+--------+---------+
3 rows in set (0.00 sec)
特定の列を指定する場合:
mysql> TRUNCATE test;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM test;
Empty set (0.00 sec)
mysql> LOAD DATA INFILE '/tmp/db.txt'
INTO TABLE test FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
IGNORE 1 LINES (id, @ignore, mycol2);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
mysql> SELECT * FROM test;
+----+--------+---------+
| id | mycol1 | mycol2 |
+----+--------+---------+
| 1 | NULL | dsafsdf |
| 2 | NULL | ghfdhg |
| 7 | NULL | strsdrt |
+----+--------+---------+
3 rows in set (0.00 sec)
また、独自の式でそれらを設定することもできます。
mysql> TRUNCATE test;
Query OK, 0 rows affected (0.00 sec)
mysql> LOAD DATA INFILE '/tmp/db.txt'
INTO TABLE test FIELDS TERMINATED BY00 ','
OPTIONALLY ENCLOSED by '"' IGNORE 1 LINES (id, @var1, mycol2)
SET mycol1 = @var1 + 1;
Query OK, 3 rows affected (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
mysql> SELECT * FROM test;
+----+--------+---------+
| id | mycol1 | mycol2 |
+----+--------+---------+
| 1 | 24 | dsafsdf |
| 2 | 0 | ghfdhg |
| 7 | 10 | strsdrt |
+----+--------+---------+
3 rows in set (0.00 sec)
ただし、プライマリキーはnullや重複にできません。たとえば、auto_increment列であるため、デフォルト値を取得しない限り、NULLに設定できないことを理解してください。