sql >> Database >  >> RDS >> Mysql

Importeer Excel-gegevens naar relationele tabellen op MySQL

U kunt bewaar uw Excel-blad als in een CSV-bestand , importeer dan een dergelijk bestand in een tijdelijke MySQL-tabel met dezelfde kolommen van het Excel-blad met behulp van de LAAD DATA INFILE commando, en splits tenslotte de tijdelijke tabelrecords in de drie tabellen "steden", "steden" en "districten".
Een uitgangspunt:aangezien geen van de "id"-velden aanwezig is in het Excel-bestand, veronderstel ik dat alle id's zijn "auto_increment" velden; ook zal het veld "continent" van de tabel "steden" altijd op een lege waarde worden gezet, aangezien dit veld niet aanwezig is in uw Excel-blad; ten slotte ga ik ervan uit dat alle "naam"-velden een maximale lengte van 255 tekens hebben.
Uitgaande van uw voorbeeldgegevens, door het Excel-blad in CSV-indeling te exporteren en (bijvoorbeeld) op te slaan in de "C:\Temp\excel.csv " bestand, zou je zoiets als dit moeten krijgen:

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

Om dit bestand in uw MySQL-database te importeren, maakt u een "excel2mysql.sql " bestand met de volgende inhoud, en uitvoeren het :

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;


  1. MySQL ABS() Functie – Retourneert de absolute waarde van een getal

  2. MySQL-query werkt niet tijdens gebruik van php-variabele in where-clausule

  3. Wat is SQL Server Management Studio (SSMS)?

  4. DROP TABEL INDIEN BESTAAT Voorbeeld in PostgreSQL