3
respostas

Bom dia

Estou utilizando MySQL Workbench no código abaixo. O que fazer para corrigir.

LOAD DATA LOCAL INFILE 'C:/Users/Administrador/Desktop/fontes/Alunos.csv'
INTO TABLE Alunos
FIELDS TERMINATED BY ';'
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
3 respostas

Oi, Rubens! Como vai?

Vamos resolver isso.
O erro COD 1046 – No database selected acontece quando o MySQL não sabe em qual banco de dados a tabela Alunos está.
Ou seja, o comando LOAD DATA tenta importar o arquivo CSV, mas não há um banco selecionado no momento da execução.

Por que isso acontece
Quando abrimos o MySQL Workbench, ele se conecta ao servidor, mas não seleciona automaticamente nenhum banco de dados.
Assim, ao executar:


LOAD DATA LOCAL INFILE 'C:/Users/Administrador/Desktop/fontes/Alunos.csv'
INTO TABLE Alunos
FIELDS TERMINATED BY ';'
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

O MySQL tenta achar a tabela Alunos, mas não sabe em qual banco procurar, e, por isso, retorna o erro 1046.

Como resolver
Você tem duas opções simples para corrigir:

1. Selecionar o banco antes do comando
Use o comando USE para definir o banco de dados ativo:


USE SeuBanco;

SET SESSION local_infile = 1;

LOAD DATA LOCAL INFILE 'C:/Users/Administrador/Desktop/fontes/Alunos.csv'
INTO TABLE Alunos
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ';'
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

Explicando:

  • USE SeuBanco; seleciona o banco.
  • SET SESSION local_infile = 1; garante que o MySQL aceite arquivos locais.
  • LINES TERMINATED BY '\r\n' é importante no Windows, pois as linhas terminam com caractere de retorno de carro e nova linha (\r\n).

2. Indicar o banco diretamente na tabela
Se preferir, você pode escrever o nome do banco junto com a tabela:


SET SESSION local_infile = 1;

LOAD DATA LOCAL INFILE 'C:/Users/Administrador/Desktop/fontes/Alunos.csv'
INTO TABLE SeuBanco.Alunos
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ';'
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

Dicas extras

  • Ativar o LOCAL INFILE no Workbench:
    No menu de conexão → Advanced → adicione:
    OPT_LOCAL_INFILE=1
    Isso permite que o Workbench envie o arquivo CSV do seu computador.

  • Verifique o diretório seguro (caso o LOCAL não funcione):

    
    SHOW VARIABLES LIKE 'secure_file_priv';
    

    Coloque o arquivo dentro da pasta indicada e rode o comando sem LOCAL:

    
    LOAD DATA INFILE 'C:/mysql-files/Alunos.csv'
    INTO TABLE SeuBanco.Alunos
    FIELDS TERMINATED BY ';'
    ENCLOSED BY '"'
    LINES TERMINATED BY '\r\n'
    IGNORE 1 LINES;
    

Sobre duplicidades
Como o curso explica, para evitar registros duplicados, você pode criar uma chave única (por exemplo, CPF) e usar as opções IGNORE ou REPLACE no comando:

  • IGNORE: descarta a linha nova duplicada.
  • REPLACE: substitui a antiga pela nova.

ALTER TABLE Alunos ADD UNIQUE KEY uk_cpf (cpf);

LOAD DATA LOCAL INFILE 'C:/Users/Administrador/Desktop/fontes/Alunos.csv'
IGNORE
INTO TABLE SeuBanco.Alunos
FIELDS TERMINATED BY ';'
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES (cpf, nome, curso);

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Bom dia

Agora aparece o erro 1229. O que fazer para corrigir?

Obrigado

Rubens Junior Schwalemberg

Oi, Rubens!

O erro 1229 acontece quando você tenta executar SET SESSION local_infile = 1; e o local_infile na sua instalação é somente global (não pode ser alterado por sessão). Resolva fazendo o seguinte, em ordem:

  1. Confirme o estado atual e o diretório seguro
    SHOW VARIABLES LIKE 'local_infile';
    SHOW VARIABLES LIKE 'secure_file_priv';

  2. Se você tiver privilégio para variável global (SYSTEM_VARIABLES_ADMIN / SUPER), habilite de forma global e reconecte:
    SET GLOBAL local_infile = ON;
    -- Feche e abra a conexão no Workbench
    -- Na conexão > Advanced > adicione OPT_LOCAL_INFILE=1

  3. Importe com LOCAL (Windows usa \r\n):
    LOAD DATA LOCAL INFILE 'C:/Users/Administrador/Desktop/fontes/Alunos.csv'
    INTO TABLE SeuBanco.Alunos
    CHARACTER SET utf8mb4
    FIELDS TERMINATED BY ';'
    ENCLOSED BY '"'
    LINES TERMINATED BY '\r\n'
    IGNORE 1 LINES;

  4. Se você não tiver privilégio para alterar GLOBAL, habilite no arquivo de configuração e reinicie o serviço MySQL:
    -- Em Windows (my.ini) ou Linux (my.cnf), adicione sob [mysqld]:
    local_infile=ON
    -- Reinicie o serviço MySQL e reconecte com OPT_LOCAL_INFILE=1 na conexão do Workbench

  5. Alternativa sem LOCAL (quando local_infile não puder ser habilitado):
    -- Mova o CSV para a pasta mostrada em secure_file_priv (ex.: C:/ProgramData/MySQL/MySQL Server 8.0/Uploads)
    LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/Alunos.csv'
    INTO TABLE SeuBanco.Alunos
    CHARACTER SET utf8mb4
    FIELDS TERMINATED BY ';'
    ENCLOSED BY '"'
    LINES TERMINATED BY '\r\n'
    IGNORE 1 LINES;

Importante: Se ainda aparecer mensagem de permissão, o erro indica que sua conta não tem privilégio para SET GLOBAL. Nesse caso, aplique a etapa 4 (configuração no arquivo) ou peça a um administrador para executar a etapa 2.

Fico à disposição. Abraços e bons estudos!