Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O mysql pode importar um arquivo csv ou outro arquivo txt em uma coluna?


Sim, você pode fazer isso em alguns passos:

Primeiro Crie uma tabela de preparo temporária (vamos chamá-la de import ) com uma coluna que conterá linhas como linhas do arquivo de dados de origem
CREATE TABLE `import` (
  `line` varchar(512) DEFAULT NULL
);

e carregar dados do arquivo na tabela
LOAD DATA INFILE '/path/to/your/file.txt'
INTO TABLE import
FIELDS TERMINATED BY '\n'
LINES  TERMINATED BY '\n'

Segundo Supondo que você tenha uma tabela de destino (vamos chamá-la de words ) que se parece com isso
CREATE TABLE `words` (
  `word` varchar(64) DEFAULT NULL
);

podemos dividir cada linha em palavras e inseri-las em words tabela com uma consulta
INSERT INTO words (word)
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(line, ' ', n.n), ' ', -1) word
  FROM import CROSS JOIN 
(
   SELECT a.N + b.N * 10 + 1 n
     FROM 
    (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
   ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
    ORDER BY n
) n
 WHERE n.n <= 1 + (LENGTH(line) - LENGTH(REPLACE(line, ' ', '')))
 ORDER BY n.n

NOTA:
  • suposição é que suas palavras sejam separadas exatamente por um espaço
  • esta consulta será dividida em até 100 palavras. Se você precisar de mais ou menos, pode ajustar um limite editando a subconsulta interna ou se importar regularmente, considere usar a tabela de contagem (números) persistente.

Terceiro Solte ou trunque (se você for usá-lo novamente para importar mais arquivos) a tabela de preparo
DROP TABLE import;

Aqui está SQLFiddle demo que mostra o passo dois.