Ir ao conteúdo

Duplicar valor da chave viola a restrição de unicidade


Ferreira27

Posts recomendados

Postado

Comecei a estudar banco de dados recentemente e estou tendo muita dificuldade.

Gostari que alguém pudesse me ajudar a tratar este erro aqui.

ERRO: duplicar valor da chave viola a restrição de unicidade "pk_empresa_id"

DETAIL: Chave (idempresa)=(E1 ) já existe.

Uma chave primária nunca poderá ser duplicada.

ALTER TABLE EMPRESA ADD CONSTRAINT PK_EMPRESA_ID PRIMARY KEY (IDEMPRESA);

Porque não posso definir a chave primária para essa coluna?

Quais comando que uso para que E1 possa aparecer nas duas tabelas de funcionários Ana e Lua.

sendo que E1 é o idempresa e Manaus é a cidade empresa.

create table empresa(

idempresa char (5),

nome_empresa varchar (60),

cidade_empresa varchar (60),

telefone_empresa char (11)

);

create table funcionario(

idfuncionario char (5),

nome_funcionario varchar (60),

celular_funcionario varchar (11),

nome_filho_funcionario varchar (60),

idempresa char (5)

);

create table filho(

idfilho serial,

nome_filho varchar (60),

idfuncionario char (5)

);

-- CRIAÇÃO DAS CHAVES PRIMARIAS

ALTER TABLE EMPRESA ADD CONSTRAINT PK_EMPRESA_ID PRIMARY KEY (IDEMPRESA);

ALTER TABLE FUNCIONARIO ADD CONSTRAINT PK_FUNCIONARIO_ID PRIMARY KEY (IDFUNCIONARIO);

ALTER TABLE FILHO ADD CONSTRAINT PK_FILHO_ID PRIMARY KEY (IDFILHO);

-- CRIACÃO DAS FOREIGN KEY

ALTER TABLE funcionario ADD constraint fk_empresa_funcionario foreign key (IDEMPRESA) references empresa (IDEMPRESA);

ALTER TABLE FILHO ADD CONSTRAINT FK_funcionario_filho FOREIGN KEY (IDFUNCIONARIO) references funcionario (IDFUNCIONARIO);

--ANA

INSERT INTO empresa (idEmpresa, nome_Empresa, telefone_empresa, cidade_empresa ) values ( 'E1', 'IFES', 35261411, 'Manaus');

INSERT INTO funcionario (idFuncionario, nome_funcionario, celular_funcionario, idEmpresa) values ( 'E110' , 'Ana', '99861222', 'E1');

--LUA

INSERT INTO empresa (idEmpresa, nome_Empresa, telefone_Empresa, cidade_Empresa ) values ( 'E1', 'IFES', 35261411, 'Manaus');

INSERT INTO funcionario (idFuncionario, nome_funcionario, celular_funcionario, idEmpresa) values ( 'E111' , 'LUA', '81131099', 'E1');

--Sol

INSERT INTO empresa (idEmpresa, nome_Empresa, telefone_Empresa, cidade_Empresa ) values ( 'E2', 'Petrobras', 35262233, 'Campus');

INSERT INTO funcionario (idFuncionario, nome_funcionario, celular_funcionario, idEmpresa) values ( 'E210' , 'Sol', '81129088', 'E2');

Postado

Olá, você está tentando criar uma chave primária, ou seja, uma chave única, em que o valor não pode, não deve e não irá nunca se repetir.

Se o ID da empresa pode se repetir, então sua chave primária deverá ser composto por um outro campo, ou pela soma de alguns campos.

Está dando erro pois você está definindo uma PK a uma tabela que já contém dados duplicados no campo IDEMPRESA, ou seja, o valor "E1", já existe em mais de um registro, e isto está errado de acordo com a PK que você está criando.

Altere o valor de IDEMPRESA de uma das empresas e execute o comando para criar a PK novamente.

Postado
Olá, você está tentando criar uma chave primária, ou seja, uma chave única, em que o valor não pode, não deve e não irá nunca se repetir.

Se o ID da empresa pode se repetir, então sua chave primária deverá ser composto por um outro campo, ou pela soma de alguns campos.

Está dando erro pois você está definindo uma PK a uma tabela que já contém dados duplicados no campo IDEMPRESA, ou seja, o valor "E1", já existe em mais de um registro, e isto está errado de acordo com a PK que você está criando.

Altere o valor de IDEMPRESA de uma das empresas e execute o comando para criar a PK novamente.

como devo fazer isso

Postado

Seus testes estão errados, é isso

remova a linha em negrito apenas........

--ANA
INSERT INTO empresa (idEmpresa, nome_Empresa, telefone_empresa, cidade_empresa ) values ( 'E1', 'IFES', 35261411, 'Manaus');

INSERT INTO funcionario (idFuncionario, nome_funcionario, celular_funcionario, idEmpresa) values ( 'E110' , 'Ana', '99861222', 'E1');

--LUA
[b]INSERT INTO empresa (idEmpresa, nome_Empresa, telefone_Empresa, cidade_Empresa ) values ( 'E1', 'IFES', 35261411, 'Manaus');
Você estava adicionando a mesma empresa já adicionada antes de adicionar a funcionária "ANA"
[/b]

INSERT INTO funcionario (idFuncionario, nome_funcionario, celular_funcionario, idEmpresa) values ( 'E111' , 'LUA', '81131099', 'E1');

--Sol
INSERT INTO empresa (idEmpresa, nome_Empresa, telefone_Empresa, cidade_Empresa ) values ( 'E2', 'Petrobras', 35262233, 'Campus');

INSERT INTO funcionario (idFuncionario, nome_funcionario, celular_funcionario, idEmpresa) values ( 'E210' , 'Sol', '81129088', 'E2');

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...