sql >> Database teknologi >  >> RDS >> Mysql

Importer Excel-data til relationelle tabeller på MySQL

Du kan gem dit Excel-ark som i en CSV-fil , og importer derefter en sådan fil i en midlertidig MySQL-tabel med de samme kolonner i Excel-arket ved at bruge INDLÆS DATAINFIL kommando, og til sidst opdele de midlertidige tabelposter i de tre tabeller "byer", "byer" og "distrikter".
En forudsætning:da ingen af ​​"id"-felterne er til stede i Excel-filen, formoder jeg, at alle id'erne er "auto_increment" felter; også "kontinent"-feltet i "byer"-tabellen vil altid være sat til en tom værdi, da dette felt ikke findes i dit Excel-ark; endelig vil jeg antage, at alle "navn"-felterne har en maksimal længde på 255 tegn.
Start fra dine eksempeldata ved at eksportere Excel-arket i CSV-formatet og gemme (f.eks.) i "C:\Temp\excel.csv " fil, bør du få noget som dette:

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

For at importere denne fil til din MySQL-database skal du oprette en "excel2mysql.sql " fil med følgende indhold, og udfør det :

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. Er det muligt i Debezium at konfigurere tabelnavn => kafka emnemapping?

  2. Kan jeg have en primær nøgle uden klynget indeks? Kan jeg også have multivalued clustered indeks?

  3. Postgres-fejl ved indsættelse - FEJL:ugyldig bytesekvens til kodning af UTF8:0x00

  4. ORA-12514 TNS:listener kender i øjeblikket ikke til den service, der er anmodet om i forbindelsesbeskrivelsen