将数据从Excel传输到MySQL服务器数据库?

将数据从Excel传输到MySQL服务器数据库?,mysql,excel,Mysql,Excel,我有一个相对复杂的excel表格,其中列开始于a,结束于BB,行开始于5,结束于203 我想做的是告诉MySQL,每一列数据(带有一个我在工作表中没有指定的标题)应该从第5行开始,到第203行结束,并确切地指定我想要传输的列。我该怎么做 谢谢你的帮助 编辑:在第203行下面有不相关的数据,我不想这样做。也有空白列,所以我需要避免这些。首先,将excel工作表另存为CSV 下一个。创建黑洞表以将数据读入: DROP TABLE IF EXISTS `test`.`import_excel`; CR

我有一个相对复杂的excel表格,其中列开始于a,结束于BB,行开始于5,结束于203

我想做的是告诉MySQL,每一列数据(带有一个我在工作表中没有指定的标题)应该从第5行开始,到第203行结束,并确切地指定我想要传输的列。我该怎么做

谢谢你的帮助


编辑:在第203行下面有不相关的数据,我不想这样做。也有空白列,所以我需要避免这些。

首先,将excel工作表另存为CSV

下一个。创建黑洞表以将数据读入:

DROP TABLE IF EXISTS `test`.`import_excel`;
CREATE TABLE  `test`.`import_excel` (
  `A` int(10) unsigned NOT NULL,
  `B` varchar(45) NOT NULL,
  `C` varchar(45) NOT NULL,
  `D` varchar(45) NOT NULL,
  `E` varchar(45) NOT NULL,
  .....
  `BB` varchar(45) NOT NULL
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1;
创建一个只有一行的简单计数器表

DROP TABLE IF EXISTS `test`.`counter`;
CREATE TABLE  `test`.`counter` (
  id int(10) unsigned NOT NULL PRIMARY KEY,
  `count` int(10) unsigned NOT NULL,
  `max_count` int(10) unsigned NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=latin1;

REPLACE INTO counter VALUES (1,0,(203-5));
在黑洞表上创建触发器

DELIMITER $$

CREATE TRIGGER ai_import_excel_each AFTER INSERT ON import_excel FOR EACH ROW
BEGIN
  DECLARE rows_left integer;

  SELECT max_count - (`count` + 1)  INTO rows_left FROM counter WHERE id = 1;
  IF rows_left > 0 THEN BEGIN
    //count the row_number you're in.
    UPDATE counter SET `count` = `count` + 1 WHERE id = 1;

    //Interpret the data and insert it into the proper tables.
    //This is just an example
    INSERT INTO real_table (a,b,c) VALUES (new.a, new.b, new.c);
    INSERT INTO real_table2 (a,b,c) VALUES (NULLIF(new.d,''), new.e, new.c);
    //You can change the data in anyway you like.
  END; END IF;
END $$

DELIMITER ;
最后将第5到203行导入
import\u excel

LOAD DATA INFILE 'c:/excel.csv' INTO TABLE import_excel 
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\r\n'
  IGNORE 4 LINES;

前4行将被加载数据填充忽略,最后一行将被触发器删除。

首先,将excel工作表另存为CSV

下一个。创建黑洞表以将数据读入:

DROP TABLE IF EXISTS `test`.`import_excel`;
CREATE TABLE  `test`.`import_excel` (
  `A` int(10) unsigned NOT NULL,
  `B` varchar(45) NOT NULL,
  `C` varchar(45) NOT NULL,
  `D` varchar(45) NOT NULL,
  `E` varchar(45) NOT NULL,
  .....
  `BB` varchar(45) NOT NULL
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1;
创建一个只有一行的简单计数器表

DROP TABLE IF EXISTS `test`.`counter`;
CREATE TABLE  `test`.`counter` (
  id int(10) unsigned NOT NULL PRIMARY KEY,
  `count` int(10) unsigned NOT NULL,
  `max_count` int(10) unsigned NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=latin1;

REPLACE INTO counter VALUES (1,0,(203-5));
在黑洞表上创建触发器

DELIMITER $$

CREATE TRIGGER ai_import_excel_each AFTER INSERT ON import_excel FOR EACH ROW
BEGIN
  DECLARE rows_left integer;

  SELECT max_count - (`count` + 1)  INTO rows_left FROM counter WHERE id = 1;
  IF rows_left > 0 THEN BEGIN
    //count the row_number you're in.
    UPDATE counter SET `count` = `count` + 1 WHERE id = 1;

    //Interpret the data and insert it into the proper tables.
    //This is just an example
    INSERT INTO real_table (a,b,c) VALUES (new.a, new.b, new.c);
    INSERT INTO real_table2 (a,b,c) VALUES (NULLIF(new.d,''), new.e, new.c);
    //You can change the data in anyway you like.
  END; END IF;
END $$

DELIMITER ;
最后将第5到203行导入
import\u excel

LOAD DATA INFILE 'c:/excel.csv' INTO TABLE import_excel 
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\r\n'
  IGNORE 4 LINES;

前4行将被
加载数据填充忽略
最后一行将被触发器删除。

Wow。我会尽快试一试。谢谢你的全面回复。哇。我会尽快试一试。谢谢你的全面回复。