Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Impor Data Excel ke Tabel Relasional di MySQL

Anda dapat simpan lembar Excel Anda seperti dalam file CSV , kemudian impor file tersebut dalam tabel MySQL sementara dengan kolom yang sama dari lembar Excel dengan menggunakan MUAT INFILE DATA perintah, dan akhirnya membagi catatan tabel sementara di tiga tabel "kota", "kota" dan "distrik".
Premis:karena tidak ada bidang "id" yang ada di file Excel, saya kira itu semua id adalah bidang "auto_increment"; juga, bidang "benua" dari tabel "kota" akan selalu disetel ke nilai kosong, karena bidang ini tidak ada di lembar Excel Anda; akhirnya, saya akan berasumsi bahwa semua bidang "nama" memiliki panjang maksimum 255 karakter.
Mulai dari data sampel Anda, dengan mengekspor Lembar Excel dalam format CSV dan menyimpan (misalnya) ke dalam "C:\Temp\excel.csv ", Anda akan mendapatkan sesuatu seperti ini:

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

Untuk mengimpor file ini ke database MySQL Anda, buat "excel2mysql.sql " dengan konten berikut, dan jalankan itu :

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql_num_rows() mengharapkan parameter 1 menjadi sumber daya, diberikan boolean

  2. Cara membatasi nilai kolom di SQLite / MySQL

  3. C# MySql BUAT PENGGUNA

  4. Memeriksa beberapa kolom untuk satu nilai

  5. MySQL Query - dapatkan catatan berdasarkan tanggal saat ini