Inserir dados em uma linha já ocupada

Boa noite

nem sei de dá pra fazer isso, mas vou tentar.
queria colocar dados em uma célula de uma linha que já está sendo ocupada.
Exemplo:

  • insert into marca (internacional) values (“ferrari”);
  • insert into marca (nacional) values (“kia”);

com os comandos acima, a tabela fica assim:

internacional | nacional

ferrari        |
                 |    kia

ele pula uma linha, pois a anterior já está sendo usada.

queria uma forma de a tabela ficasse assim:


internacional | nacional

ferrari        |    kia
                 |   
                 |

detalhe…que não precisasse mencionar as informações já contidas na tabela para pode inserir, por exemplo:
insert into marca (nacional) values ("ferrari) where internacional = “ferrari”;

Inserir significa criar uma nova linha.
O que você quer fazer é atualizar uma linha já existente, pra isso tem o comando update.

update marca set nacional = 'kia' where internacional like 'ferrari';

olá, boa tarde…não sei se deixei o posto claro, mas eu queria uma forma de não precisar fazer isso…esse seu código ai, está descrito em meu post, lá embaixo…o que eu quero, é que insira, como de fosse uma informação nova, e não acrescentar informações em algo já existente, como você mostrou ai.

Uma forma de não precisar fazer o quê?

Você está mexendo com banco de banco de dados, pois bem, a instrução INSERT é pra inserir um novo registro, uma nova linha.
A instrução UPDATE é para atualizar/modificar o valor de um registro.

Agora se você quer inserir valores em mais de uma coluna ao mesmo tempo, você também pode:

insert into marca (internacional, nacional) values ('ferrari', 'kia');

tentar explicar denovo…

eis a minha tabela (quantidade_carros):

ferrari | porsche | kia | toyota | fiat

todas sem nada, mas ai, eu queria realizar um insert nela, até ai tudo bem:

insert into quantidade_carros (kia) values (“2”);

ai a tabela irá ficar assim, beleza:

Imagem1

mas ai, se eu fizer dois insert’s:

insert into quantidade_carros (porsche) values (1);
insert into quantidade_carros (toyota) values (1);

a tabela irá ficar assim:

Imagem2

como pode ver, ele sempre pula uma linha para inserir novos valores.

o que eu quero é, não fazer um update (que eu sei que posso fazer isso), mas sim, um insert, pra poder ficar assim:

Imagem3

pois, se eu fizer com o update, eu terei que mencionar um valor que está descrito na linha em que tenho que colocar o valor (coisa que quero evitar), tipo assim:

update table quantidade_carros set ferrari = 1 where porche = 2;

aqui eu tenho que mencionar uma informação já existente de uma linha para pode adicionar o valor.
eu quero é fazer um insert sem ter que fazer essa menção ai acima, entende ? De forma que a tabela fique assim, sem pilar as linhas.

ou seja, varios insert’s diferentes, que insiram na mesma linha, tipo assim:

insert into quantidade_carros (porsche) values (“1”);
insert into quantidade_carros (toyota) values (“1”);
insert into quantidade_carros (kia) values (“2”);

Imagem3

sem fazer ele pular de linha, sem mencionar valores de linhas já usadas ou usar o update.

Acho que você está cometendo um erro de modelagem comum, tentando implementar seu esquema do banco como uma tabela Excel.

Geralmente num banco de dados cada coluna representa um tipo de informação, e cada linha valores para aquele tipo.
No seu exemplo, você teria algo assim:
colunas: marca, origem, valor

E iria inserir esses dados com:

INSERT INTO tabela(marca, origem, valor) VALUES ('ferrari', 'internacional', 1);
INSERT INTO tabela(marca, origem, valor) VALUES ('kia', 'nacional', 2);
INSERT INTO tabela(marca, origem, valor) VALUES ('toyota', 'internacional', 1);

Geralmente é assim que se armazena essas informações.

Na hora de mostrar para o usuário, daí você faz essa transformação para transformar valores de linhas em valores de coluna (como uma pivot table de excel).

Essa seria a solução recomendada.

O que você tá tentando fazer é a Pior Solução: manter uma coluna para cada marca.
A primeira vez faria um INSERT usando marca e valor.
Todas as outras vezes daria um UPDATE mas sem WHERE. Sua tabela só tem uma linha, não precisa dizer qual vai ser atualizada.
Isso só tem desvantagens.
A cada nova marca tem que mudar o esquema do banco de dados. Ao invés de só inserir um novo registro (como mostrado no primeiro exemplo)

então…não é possível né, a não ser que seja uma tabela para cada coluna…vish.

mas tudo bem, sem problemas, agradeço pela atenção.:sweat_smile:

Possível é, só não é uma boa idéia.

Onde está tentando usar isso exatamente?

Usar o banco de dados do jeito que eu falei e mostrar para o usuário do jeito que você mostrou é bem comum na verdade. Por que não tenta fazer isso?

Eu queria fazer assim porque essa tabela ai seria apenas para mostrar os nomes, as informações mesmo, de cada carro, estariam em outra tabela. essa do jeito que eu queria fazer, seria só pra mostrar os nomes mesmo. Tem um código que ajuda a modificar somente na célula que deseja, e estou utilizando ele. Se tem como fazer tabela do jeito que queria, me mostre.

Se é apenas para mostrar, o que precisas é de aprender SQL e fazer o SELECT adequado e não tentar inventar uma tabela confusa e sem qualquer sentido.

Se ja tens informações dos carros noutra tabela, mostra o que tens, e o que pretendes e alguém te ajudará de certeza com essa consulta.

1 curtida