2 votes

Error: 121 "Duplicate key on write or update" - MySql

When I try to run the query in phpMyAdmin I get the following error:

Error SQL query:

ALTER TABLE common_publication_descriptions ADD CONSTRAINT FK_id_commun_publication_comun FOREIGN KEY (id_publication_commun) REFERENCES publications_commons (id) MySQL said: Documentation

1005 - Cannot create table nombre_bd . descripciones_publicaciones_comunes (Error: 121 "Duplicate key on write or update") (Detalles…)

Here is the script of my query:

CREATE TABLE fotos_publicaciones_comunes
(
    id VARCHAR(15) NOT NULL,
    id_publicacion_comun VARCHAR(15) NOT NULL,
    foto TEXT NOT NULL,
    PRIMARY KEY (id),
    KEY (id_publicacion_comun)
) 
;

CREATE TABLE descripciones_publicaciones_comunes
(
    id VARCHAR(15) NOT NULL,
    id_publicacion_comun VARCHAR(15) NOT NULL,
    descripcion VARCHAR(150) NOT NULL,
    PRIMARY KEY (id),
    KEY (id_publicacion_comun)
) 
;

CREATE TABLE foto_publicaciones_eventos
(
    id VARCHAR(15) NOT NULL,
    id_publicacion_evento VARCHAR(15) NOT NULL,
    foto TEXT NOT NULL,
    PRIMARY KEY (id),
    KEY (id_publicacion_evento)
) 
;

CREATE TABLE publicaciones_comunes
(
    id VARCHAR(15) NOT NULL,
    id_publicacion VARCHAR(15) NOT NULL,
    PRIMARY KEY (id),
    KEY (id_publicacion)
) 
;

CREATE TABLE publicaciones_eventos
(
    id VARCHAR(15) NOT NULL,
    id_publicacion VARCHAR(15) NOT NULL,
    titulo_evento VARCHAR(50) NOT NULL,
    descripcion_evento VARCHAR(150) NOT NULL,
    fecha_inicio DATE NOT NULL,
    fecha_final DATE NOT NULL,
    hora_inicio TIME NOT NULL,
    hora_final TIME,
    direccion VARCHAR(150) NOT NULL,
    ubicacion VARCHAR(50) NOT NULL,
    foto_portada TEXT NOT NULL,
    PRIMARY KEY (id),
    KEY (id_publicacion)
) 
;

CREATE TABLE publicaciones
(
    id VARCHAR(15) NOT NULL,
    id_publicante VARCHAR(15) NOT NULL,
    tipo_publicacion VARCHAR(10) NOT NULL,
    fecha_publicacion TIMESTAMP NOT NULL DEFAULT now(),
    publicacion_visible TINYINT NOT NULL,
    PRIMARY KEY (id)
) 
;

ALTER TABLE fotos_publicaciones_comunes ADD CONSTRAINT FK_id_publicacion_comun 
FOREIGN KEY (id_publicacion_comun) REFERENCES publicaciones_comunes (id)
;

ALTER TABLE descripciones_publicaciones_comunes ADD CONSTRAINT FK_id_publicacion_comun 
FOREIGN KEY (id_publicacion_comun) REFERENCES publicaciones_comunes (id)
;

ALTER TABLE foto_publicaciones_eventos ADD CONSTRAINT FK_id_publicacion_evento 
FOREIGN KEY (id_publicacion_evento) REFERENCES publicaciones_eventos (id)
;

ALTER TABLE publicaciones_comunes ADD CONSTRAINT FK_id_publicacion 
FOREIGN KEY (id_publicacion) REFERENCES publicaciones (id)
;

ALTER TABLE publicaciones_eventos ADD CONSTRAINT FK_id_publicacion 
FOREIGN KEY (id_publicacion) REFERENCES publicaciones (id)
;

1voto

Juan Rom Points 1

You had duplicated the name of the restriction that is, after add constraint . It is a name that must be declared but you do not use it, mysql does. Notice that I put a number to each one. And I also commented the KEY(claveForanea) look:

CREATE TABLE fotos_publicaciones_comunes
(
    id VARCHAR(15) NOT NULL,
    id_publicacion_comun VARCHAR(15) NOT NULL,
    foto TEXT NOT NULL,
    PRIMARY KEY (id)
    -- KEY (id_publicacion_comun)
) 
;

CREATE TABLE descripciones_publicaciones_comunes
(
    id VARCHAR(15) NOT NULL,
    id_publicacion_comun VARCHAR(15) NOT NULL,
    descripcion VARCHAR(150) NOT NULL,
    PRIMARY KEY (id)
    -- KEY (id_publicacion_comun)
) 
;

CREATE TABLE foto_publicaciones_eventos
(
    id VARCHAR(15) NOT NULL,
    id_publicacion_evento VARCHAR(15) NOT NULL,
    foto TEXT NOT NULL,
    PRIMARY KEY (id)
    -- KEY (id_publicacion_evento)
) 
;

CREATE TABLE publicaciones_comunes
(
    id VARCHAR(15) NOT NULL,
    id_publicacion VARCHAR(15) NOT NULL,
    PRIMARY KEY (id)
    -- KEY (id_publicacion)
) 
;

CREATE TABLE publicaciones_eventos
(
    id VARCHAR(15) NOT NULL,
    id_publicacion VARCHAR(15) NOT NULL,
    titulo_evento VARCHAR(50) NOT NULL,
    descripcion_evento VARCHAR(150) NOT NULL,
    fecha_inicio DATE NOT NULL,
    fecha_final DATE NOT NULL,
    hora_inicio TIME NOT NULL,
    hora_final TIME,
    direccion VARCHAR(150) NOT NULL,
    ubicacion VARCHAR(50) NOT NULL,
    foto_portada TEXT NOT NULL,
    PRIMARY KEY (id)
    -- KEY (id_publicacion)
) 
;

CREATE TABLE publicaciones
(
    id VARCHAR(15) NOT NULL,
    id_publicante VARCHAR(15) NOT NULL,
    tipo_publicacion VARCHAR(10) NOT NULL,
    fecha_publicacion TIMESTAMP NOT NULL DEFAULT now(),
    publicacion_visible TINYINT NOT NULL,
    PRIMARY KEY (id)
) 
;

ALTER TABLE fotos_publicaciones_comunes ADD CONSTRAINT FK_id_publicacion_comun1 
FOREIGN KEY (id_publicacion_comun) REFERENCES publicaciones_comunes (id)
;

ALTER TABLE descripciones_publicaciones_comunes ADD CONSTRAINT FK_id_publicacion_comun2 
FOREIGN KEY (id_publicacion_comun) REFERENCES publicaciones_comunes (id)
;

ALTER TABLE foto_publicaciones_eventos ADD CONSTRAINT FK_id_publicacion_evento3 
FOREIGN KEY (id_publicacion_evento) REFERENCES publicaciones_eventos (id)
;

ALTER TABLE publicaciones_comunes ADD CONSTRAINT FK_id_publicacion4 
FOREIGN KEY (id_publicacion) REFERENCES publicaciones (id)
;

ALTER TABLE publicaciones_eventos ADD CONSTRAINT FK_id_publicacion5 
FOREIGN KEY (id_publicacion) REFERENCES publicaciones (id)
;

0 votes

I understand, but when adding the numbers to the constraints and when commenting on the KEY(claveForanea) Does it affect the structure that I want to be in the database?

0 votes

does not affect, because in order to declare the clave primaria the instruction is sufficient primary key (id) . And the names of the restrictions, as I told you, it is only a name that the mysql system uses, you do not use it, you when you want to refer to the clave foranea you will use the name of the clave foranea e.g., the clave foranea from fotos_publicaciones_comunes is id_publicacion_comun

0 votes

I am seeing that in publicaciones you have not declared the clave foranea id_publicante you also do not have the table publicante

0voto

the problems you have are 2, but they are practically the same:

ALTER TABLE fotos_publicaciones_comunes ADD CONSTRAINT FK_id_publicacion_comun <---------- 1)
FOREIGN KEY (id_publicacion_comun) REFERENCES publicaciones_comunes (id)
;

ALTER TABLE descripciones_publicaciones_comunes ADD CONSTRAINT FK_id_publicacion_comun <-- 1)
FOREIGN KEY (id_publicacion_comun) REFERENCES publicaciones_comunes (id)
;

-------------------------------------------

ALTER TABLE publicaciones_comunes ADD CONSTRAINT FK_id_publicacion <----- 2)
FOREIGN KEY (id_publicacion) REFERENCES publicaciones (id)
;

ALTER TABLE publicaciones_eventos ADD CONSTRAINT FK_id_publicacion <------2)
FOREIGN KEY (id_publicacion) REFERENCES publicaciones (id)
;

You have those repeated names... just change the names of the constraints and it will work without problems.

for example:

ALTER TABLE fotos_publicaciones_comunes ADD CONSTRAINT FK_id_publicacion_comun1
FOREIGN KEY (id_publicacion_comun) REFERENCES publicaciones_comunes (id)
;

ALTER TABLE descripciones_publicaciones_comunes ADD CONSTRAINT FK_id_publicacion_comun2
FOREIGN KEY (id_publicacion_comun) REFERENCES publicaciones_comunes (id)
;

ALTER TABLE publicaciones_comunes ADD CONSTRAINT FK_id_publicacion1
FOREIGN KEY (id_publicacion) REFERENCES publicaciones (id)
;

ALTER TABLE publicaciones_eventos ADD CONSTRAINT FK_id_publicacion2
FOREIGN KEY (id_publicacion) REFERENCES publicaciones (id)
;

HolaDevs.com

HolaDevs is an online community of programmers and software lovers.
You can check other people responses or create a new question if you don't find a solution

Powered by:

X