Cet article résume l' CentOS7 utiliser la LOAD DATA <LOCAL> INFILE déclaration MySQL8.0 fichier méthode txt et les données de fichiers csv d'importation et d' erreurs de base de données rencontrées. Parce que les deux la même méthode, nous présentons d' abord l'opération d'importation et d' erreurs fichiers txt, csv joindre une brève description de la commande et de diriger la finale.
Les données brutes
Nom | propriétaire | espèce | sexe | naissance | décès |
---|---|---|---|---|---|
Duveteux | Harold | chat | F | 1993-02-04 | |
Les griffes | Gwen | chat | m | 1994-03-17 | |
Buffy | Harold | chien | F | 13/05/1989 | |
croc | Benny | chien | m | 27/08/1990 | |
Bowser | Diane | chien | m | 31/08/1979 | 29/07/1995 |
Gai | Gwen | oiseau | F | 1998-09-11 | |
Whistler | Gwen | oiseau | 1997-12-09 | ||
Svelte | Benny | serpent | m | 1996-04-29 |
Préparer le fichier txt
La valeur nulle remplacé par N \, dans chaque rangée des données de délimitation de T, entre les lignes de saut de ligne est \ r \ n. txt puis stocké dans / var / lib / chemin mysql-fichiers sous.
Préparer table de données
mysql> use testdb2;
mysql> create table tbl_pet (
-> name varchar(10),
-> owner varchar(10),
-> species varchar(10),
-> sex varchar(1),
-> birth date,
-> death date)CHARSET = utf8;
importation de données
mysql> LOAD DATA INFILE '/var/lib/mysql-files/pet.txt' INTO TABLE tbl_pet LINES TERMINATED BY '\r\n';
Résultats: Importation
mysql> select * from tbl_pet;
+----------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+--------+---------+------+------------+------------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Fang | Benny | dog | m | 1990-08-27 | NULL |
| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
| Slim | Benny | snake | m | 1996-04-29 | NULL |
+----------+--------+---------+------+------------+------------+
8 rows in set (0.00 sec)
Vous pouvez continuer à importer les données dans la nouvelle table sera automatiquement ajouté à l'enregistrement original.
Erreur Résumé:
# Numéro1 : ERREUR 1148 (42000): La commande utilisée est pas autorisée avec cette version de MySQL
déclaration d'erreur: MySQL> LOAD DATA LOCAL 'de /var/lib/mysql/pet.txt' INFILE INTO TABLE tbl_pet;
Erreur raison: plus d'un mot-clé LOCAL. Lorsque le fichier à l'écriture côté client local, lorsque le serveur sans écriture. Ma base de données MySQL et le fichier txt est dans la même machine virtuelle, donc ne pas ajouter LOCAL.
# Numéro2 : ERREUR 1290 (HY000): Le serveur MySQL estcoursexécution avec le --secure-file-PRIV optionsorte qu'il ne peut pas exécuter cette instruction
Erreur Motif: chemin MySQL sécurisé fourni fichier-PRIV correspondant à l'attribut, lorsque le fichier de données sont importées à partir seront donnés les autres chemins.
Solution: Vérifiez fichier sécurisé-PRIV spécifier le chemin et le fichier de données en elle. référence https://blog.csdn.net/FallingU/article/details/75675220
mysql> show variables like '%secure%';
+--------------------------+-----------------------+
| Variable_name | Value |
+--------------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+--------------------------+-----------------------+
# Question3 : ERREUR 1292 (22007): Valeur de date incorrect: '' pourcolonne 'mort' àligne 1
mauvaises raisons: le début d'une copie directe des données originales dans le tableau pour le fichier txt ne gère pas, placez une valeur vide est vide, ne répond pas à la représentation des valeurs NULL dans MySQL, donc une erreur.
Solution: La valeur vide \ N à la place. référence https://dev.mysql.com/doc/refman/8.0/en/loading-tables.html
Question4 # : Utilisez LOAD DATA INFILE '/var/lib/mysql-files/pet.txt' INTO TABLEdonnées d'importation échoue encore
Erreur: « pour la colonne » mort « à la ligne 1 valeur de date: » N
Erreur raison: terminée par la valeur par défaut des champs est « \ t », des lignes terminées par défaut est « \ n », alors que de Windows fichiers sur une nouvelle ligne « \ r \ le n », le X-Mac OS est « \ r ».
La solution: ajouter des lignes TERMINATED BY '\ r \ n', comme suit:
mysql> LOAD DATA INFILE '/var/lib/mysql-files/pet.txt' dans la table tbl_pet LINES TERMINATED BY '\ r \ n' ;
Importer des données de fichier csv
fichiers de données brutes: Source https://blog.csdn.net/u013378642/article/details/80952849
mysql> use testdb;
mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| movie_tbl |
+------------------+
mysql> desc movie_tbl;
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| movie_id | int(11) | YES | | NULL | |
| movie_name | varchar(40) | NO | | NULL | |
| movie_score | float unsigned | YES | | NULL | |
| region | varchar(16) | YES | | NULL | |
| year | year(4) | YES | | NULL | |
| movie_type | varchar(30) | YES | | NULL | |
| director | varchar(80) | YES | | NULL | |
| actor | varchar(60) | YES | | NULL | |
+-------------+------------------+------+-----+---------+----------------+
mysql> LOAD DATA INFILE '/var/lib/mysql-files/Movies.csv' INTO TABLE movie_tbl
-> CHARACTER SET utf8
-> FIELDS TERMINATED BY ','
-> LINES TERMINATED BY '\r\n'
-> IGNORE 1 LINES
-> (movie_id,movie_name,movie_score,region,year,movie_type,director,actor);
Informations complémentaires:
1. de caractère Utf8: En raison de données chinoises, spécifiez le codage UTF8.
2. FIELDS TERMINATED BY ' ': fichier csv',' données séparées.
3. IGNORE 1 LIGNES: sauter des premières données d'en-tête de ligne dans le fichier d'origine. Si vous n'écrivez pas, l'en-tête sera traité comme l'importation de données. Si vous voulez sauter plusieurs lignes à partir de zéro, vous pouvez modifier l'avant des lignes numériques.
4. Pour importer des données dans le dernier champ, l'ordre sur le terrain et serait conforme à l'ordre du document original.
La fin ~