How to upload and download a csv file into/from MySQL. This is particularly
useful to manipulate data for data analysis.
> cd "C:\Program Files\MySQL\MySQL Server
5.7\bin"
> mysql -u root –p
Loading a Csv file:
mysql> create database mycsv;
mysql> show databases
mysql> use mycsv
mysql> create table myTable (id int not null primary key
auto_increment,name varchar(20), age decimal);
mysql> describe mytable;
+-------+-------------------+--------+------+----------+----------------+
| Field | Type | Null |
Key | Default | Extra |
+-------+--------------------+--------+-----+---------+----------------+
| id | int(11) |
NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
| age | decimal(10,0) | YES | | NULL | |
+-------+--------------------+--------+-----+----------+----------------+
Create a simple CSV file for testing:
> notepad mycsv.csv
> type mycsv.csv
Anna, 25
Boris, 32
Carol, 27
- Load the data from csv to mysql:
mysql> load data infile 'C:/Users/myUser/mycsv.csv' into table mytable fields terminated by ',' lines terminated by '\n' (name, age);
ERROR 1290 (HY000): The MySQL server is running with the
--secure-file-priv option so it cannot execute this statement
Adding local we can overcome this issue. Also be careful
with the direction of the slashes in the path string:
mysql> load data local infile 'C:/Users/myUser/mycsv.csv' into table mytable fields terminated by ',' lines terminated by '\n' (name, age);
mysql> select * from mytable;
+----+-------+------+
| id | name | age |
+----+-------+------+
| 1 | Anna | 25 |
| 2 | Boris | 32 |
| 3 | Carol | 27 |
+----+-------+------+
Notes:
- The id column (Primary key) is not added as field parameter into table fields
- Checking the local_infile is ON:
mysql> show global variables like 'local_infile';
If not ON then: set global local_infile=true;
- Checking the location of the folder to upload files:
mysql> show variables like 'secure_file_priv';
C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\
- To copy a table inside a database:
CREATE TABLE new_table LIKE another_table; //creates a new table with the same format of another table
INSERT new_table SELECT * FROM another_table; //inserts the data from the another table
- Exporting from mysql to csv:
The keywords are "query ... into outfile ..."
mysql> select * from test.sqlth_te limit 1000 into outfile 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/Test.csv' fields enclosed by '"' terminated by ';' escaped by '"' lines terminated by '\r\n';
Note:
The path above is the same location that appears running the query:
mysql> SELECT @@secure_file_priv;
C:\ProgramData\MySQL\MySQL Server 5.7\Uploads\
No comments:
Post a Comment