• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

JoaoRodrigues

MySQL - Inserção de múltiplos valores em múltiplos campos

8 mensagens neste tópico

Boas pessoal, aqui vai a minha primeira posta em MySQL :P

Tenho uma tupla (herdada de um script em python) de uma lista de campos e uma lista de valores que toma a seguinte forma genérica:

(campo1, campo2, campo3, ...), ((valor1),(valor2,valor3),(), ...)

Como podem perceber, há campos com mais do que um valor. A minha pergunta é, como insiro eu isto na base de dados? Estou a tentar da seguinte forma:

ALTER TABLE Entamoeba_histolytica ADD (uniprot_id, AC, DE, OS, EMBL_Genomic_DNA, KEGG) VARCHAR(120);

(Aliás, este comando é o de inserção de campos múltiplos na tabela, que falha...)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boax....

Não percebi o que prentendes fazer.. inserir varios valores ou alterar a tua tabela?

Se atendermos ao teu codigo, pretendes alterar a tabela.. e nesse caso a sintaxe esta errada..

ALTER TABLE a_tua_tabela
ADD COLUMN `nova_coluna1` VARCHAR(120)  AFTER `nome_ultima_coluna_antiga`,
ADD COLUMN `nova_coluna2` VARCHAR(120)  AFTER `nova_coluna1`;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmm, não percebeste :P Mas deixa lá, problema meu de expressão :P

O que eu quero é: tenho uma tabela sem colunas. Quero inserir X colunas de uma vez só, num só comando. Posso fazer isso?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem problema ultrapassado com um fantástico workaround..

Agora, a minha dúvida original. Obtenho este output:

Non-existing table. Creating!
ALTER TABLE Entamoeba_histolytica ADD uniprot_id VARCHAR(120);
ALTER TABLE Entamoeba_histolytica ADD AC VARCHAR(120);
ALTER TABLE Entamoeba_histolytica ADD DE VARCHAR(120);
ALTER TABLE Entamoeba_histolytica ADD OS VARCHAR(120);
ALTER TABLE Entamoeba_histolytica ADD EMBL_Genomic_DNA VARCHAR(120);
ALTER TABLE Entamoeba_histolytica ADD KEGG VARCHAR(120);
INSERT INTO Entamoeba_histolytica (uniprot_id, AC, DE, OS, EMBL_Genomic_DNA, KEGG) VALUES '(('14331_ENTHI'),('P42648'),('14-3-3_protein_1_(14-3-3-1).'),('Entamoeba_histolytica'),('U13418 , AAA80185.1'),('ehi:99.t00019'))'

Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''(('14331_ENTHI'),('P42648'),('14-3-3_protein_1_(14-3-3-1).'),('Entamoeba_histol' at line 1

Como se vê: Criei uma tabela com as colunas indicadas pelos sucessivos "ALTER TABLE". Depois, queria lá "enfiar" valores. O comando que estou a tentar usar é:

INSERT INTO Entamoeba_histolytica (uniprot_id, AC, DE, OS, EMBL_Genomic_DNA, KEGG) VALUES '(('14331_ENTHI'),('P42648'),('14-3-3_protein_1_(14-3-3-1).'),('Entamoeba_histolytica'),('U13418 , AAA80185.1'),('ehi:99.t00019'))'

Mas dá-me erro de sintaxe. Consegues perceber agora o meu problema? Tentar inserir, de uma só vez, vários valores em vários campos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boax...

Perdi-me com tantos ' ' ' e com tantos ( ) ( )  :-[

queres isto:

INSERT INTO
Entamoeba_histolytica
(uniprot_id, AC, DE, OS, EMBL_Genomic_DNA, KEGG) VALUES
('14331_ENTHI',
'P42648',
'14-3-3_protein_1_(14-3-3-1).',
'Entamoeba_histolytica',
'U13418 , AAA80185.1',
'ehi:99.t00019');

?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Há campos que levam mais do que um valor, daí eu ter alguns () a mais :P

Acho que já resolvi o problema: () a mais..

O código "certo" é:

INSERT INTO Schistosoma_mansoni (uniprot_id, AC, DE, OS, EMBL_mRNA) VALUES ('14331_SCHMA'),('Q26540'),('14-3-3_protein_homolog_1.'),('Schistosoma_mansoni'),('U24281 , AAC46983.1')

Agora dá-me outro erro ainda :P

Error 1136: Column count doesn't match value count at row 1

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boax....

so respondo porque és um gajo de coimbra :P:D

O teu codigo "certo" tem sintaxe errada...

é:

values('xxx','yyy');  e nao values('xxx'),('yyy');

O erro que te da, é por causa disso... 

tu estas no 2º caso, ele reconhece somente um valor, mas tu antes no

(uniprot_id, AC, DE, OS, EMBL_mRNA)
declaras 5 campos.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A regionalização ajuda é? :P és de cbr?

Eu percebi o erro há pouco e já consegui por isto a trabalhar :P Era exactamente isso que me faltava ver. O código final ficou tipo:

values 'xxx','yyyy', ('zzzz, zzzz, zzzz'), ...

Porque havia campos que levavam mais do que um valor (separados por virgulas).

Thanks pela ajuda! Agora tenho em mãos outro problema, mas já não tem que ver com sintaxes!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora