Mysql
 sql >> Base de données >  >> RDS >> Mysql

Importer des données Excel dans des tables relationnelles à MySQL

Vous pouvez enregistrer votre feuille Excel dans un fichier CSV , puis importez ce fichier dans une table MySQL temporaire avec les mêmes colonnes de la feuille Excel en utilisant le CHARGER LE FICHIER DE DONNEES commande, et enfin diviser les enregistrements de la table temporaire dans les trois tables "villes", "villes" et "districts".
Une prémisse :puisqu'aucun des champs "id" n'est présent dans le fichier Excel, je suppose que tous les identifiants sont des champs "auto_increment" ; de plus, le champ "continent" de la table "villes" sera toujours mis à une valeur vide, puisque ce champ n'est pas présent dans votre feuille Excel; enfin, je partirai du principe que tous les champs "nom" ont une longueur maximale de 255 caractères.
En partant de vos exemples de données, en exportant la feuille Excel au format CSV et en l'enregistrant (par exemple) dans le fichier "C:\Temp\excel.csv ", vous devriez obtenir quelque chose comme ceci :

"city name","town name","district name"
"X","Y","A"
"X","Y","B"
"X","K","C"
"X","K","D"

Pour importer ce fichier dans votre base de données MySQL, créez un "excel2mysql.sql " fichier avec le contenu suivant, et exécuter il :

DROP TABLE IF EXISTS excel_table;
CREATE temporary TABLE excel_table (
  city_name VARCHAR(255),
  town_name VARCHAR(255),
  district_name VARCHAR(255)
) DEFAULT CHARSET utf8;

LOAD DATA LOCAL INFILE 'C:/Temp/excel.csv' 
INTO TABLE excel_table 
CHARACTER SET utf8
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
IGNORE 1 LINES;

DROP TABLE IF EXISTS cities;
CREATE TABLE cities (
  city_id int NOT NULL auto_increment,
  city_name VARCHAR(255),
  primary key (city_id)
) DEFAULT CHARSET utf8;

INSERT INTO cities 
  SELECT distinctrow NULL, city_name 
    FROM excel_table 
   ORDER BY city_name;

DROP TABLE IF EXISTS towns;
CREATE TABLE towns (
  town_id int NOT NULL auto_increment,
  city_id int NOT NULL,
  town_name VARCHAR(255),
  continent VARCHAR(255),
  primary key (town_id)
) DEFAULT CHARSET utf8;

INSERT INTO towns 
  SELECT distinctrow NULL, city_id, town_name, '' 
    FROM excel_table, cities 
   WHERE cities.city_name=excel_table.city_name 
   ORDER BY town_name;

DROP TABLE IF EXISTS districts;
CREATE TABLE districts (
  district_id int NOT NULL auto_increment,
  town_id int NOT NULL,
  district_name VARCHAR(255),
  primary key (district_id)
)  DEFAULT CHARSET utf8;

INSERT INTO districts 
  SELECT distinctrow NULL, town_id, district_name 
    FROM excel_table, towns 
   WHERE towns.town_name=excel_table.town_name 
   ORDER BY district_name;