Вы можете сохранить лист Excel как в CSV-файле , а затем импортировать такой файл во временную таблицу MySQL с теми же столбцами листа Excel, используя LOAD DATA INFILE и, наконец, разделить записи временных таблиц на три таблицы: «города», «города» и «районы».
Предпосылка: поскольку в файле Excel нет ни одного поля «id», я полагаю, что всеидентификаторы - это поля "auto_increment";Кроме того, поле «континент» таблицы «города» всегда будет иметь пустое значение, так как это поле отсутствует на вашем листе Excel;наконец, я предполагаю, что все поля имени имеют максимальную длину 255 символов.
Начиная с ваших образцов данных, экспортируя лист Excel в формате CSV и сохраняя (например) в "* 1007"Файл * C: \ Temp \ excel.csv", вы должны получить что-то вроде этого:
"city name","town name","district name"
"X","Y","A"
"X","Y","B"
"X","K","C"
"X","K","D"
Чтобы импортировать этот файл в базу данных MySQL, создайте" excel2mysql ".sql"со следующим содержимым, и выполнить его :
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;