Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

numeracion autoincrementada

Estas en el tema de numeracion autoincrementada en el foro de Mysql en Foros del Web. Hola, tengo una tabla con dos campos que son clave primaria, y quiero agregar un campo que se llama id, en el que aparezca una ...
  #1 (permalink)  
Antiguo 30/09/2011, 15:12
 
Fecha de Ingreso: mayo-2010
Mensajes: 414
Antigüedad: 14 años, 7 meses
Puntos: 2
numeracion autoincrementada

Hola, tengo una tabla con dos campos que son clave primaria, y quiero agregar un campo que se llama id, en el que aparezca una numeracion autoincrementada, al hacer esto me pone un error.

Cualquier opinión me sirve saludos!
  #2 (permalink)  
Antiguo 30/09/2011, 15:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: numeracion autoincrementada

Cita:
Iniciado por sebacomas Ver Mensaje
Hola, tengo una tabla con dos campos que son clave primaria, y quiero agregar un campo que se llama id, en el que aparezca una numeracion autoincrementada, al hacer esto me pone un error.

Cualquier opinión me sirve saludos!
Lo primero que deberías hacer es decirnos qué error te devuelve, porque sin eso no podemos adivinar lo que sucede.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 30/09/2011, 15:55
 
Fecha de Ingreso: mayo-2010
Mensajes: 414
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: numeracion autoincrementada

disculpa!

Error
consulta SQL:

ALTER TABLE `pop_up` ADD `id` INT( 255 ) NOT NULL AUTO_INCREMENT ,
ADD PRIMARY KEY ( `id` )

MySQL ha dicho:

#1068 - Multiple primary key defined
  #4 (permalink)  
Antiguo 30/09/2011, 16:08
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: numeracion autoincrementada

Bueno, el mensaje lo dice todo: Estás intentando crear una segunda PRIMARY KEY, y eso es por definición imposible.
Si ya tienes definida una PK, ese campo autoincremental es esencialmente superfluo. Un autoincremental sólo se justifica para usarlo como PK. Si no es para eso carece de utilidad.
¿Exactamente qué estás tratando de lograr? ¿cuál es el problema que debes resolver?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 30/09/2011, 16:26
 
Fecha de Ingreso: mayo-2010
Mensajes: 414
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: numeracion autoincrementada

Quiero ademas de los campos que ya tengo diferenciar cada producto con un valor unico, por eso quiero ponerle un valor autoincrementable.
  #6 (permalink)  
Antiguo 30/09/2011, 16:26
 
Fecha de Ingreso: mayo-2010
Mensajes: 414
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: numeracion autoincrementada

Se que algo debo estar haciendo mal pero no tengo tiempo de revisar el codigo.
  #7 (permalink)  
Antiguo 30/09/2011, 16:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: numeracion autoincrementada

No es que estés haciendo mal, al menos no exactamente. Es un problema más simple que eso.
Una PK no sólo es un identificador único, sino que además es lo que mantiene el orden físico de los registros en el disco (una PK genera un índice cluster y por definición y especificación, sólo puede existir un único indice cluster por tabla).
Como es obvio, no puedes ordenar físicamente un archivo de dos formas diferentes al mismo tiempo. ¿Podrías ordenar los libros una biblioteca de dos formas distintas al mismo tiempo?
No, por supuesto que no.

Lo que tu estás queriendo hacer es crear una clave alternativa, o clave candidata, pero no tiene ningún sentido crear dos claves de ese tipo (univocas), en la misma tabla si no es por un requerimiento específico del sistema.
Si tu tabla ya contiene una PK definida por otros campos, no debería requerir otra más. Si lo que quieres es mantener el orden cronológico de entrada de los registros, y la clave definida actualmente no te lo da, tienes dos soluciones:
1) Agregar este nuevo campo como un INT UNSIGNED y definirle un índice UNIQUE, para luego crear su numeración por un TRIGGER o por programación.
2) Quitarle a los dos campos ya definidos su condición de PK, declararlos como indice UNIQUE y crear el campo AUTO_INCREMENT como lo estabas haciendo.

Lo que no vas a poder hacer ni en MySQL, ni en ningún otro DBMS (Oracle, DB2, SQL Server, etc.) es crear dos claves primarias distintas para la misma tabla. Ningún DBMS lo permitirá por restricciones del paradigma E-R.

P.D.: SI no tienes tiempo de revisar estas cosas, mejor hazlas bien de entrada, porque un diseño mal definido y si normalizar implicará enormes cantidades de revisiones inútilmente, además de ineficiencia en las consultas que requerirán constantes correcciones y ajsutes.
Los modelos de datos (las bases de datos), deben estar bien construidas y terminadas de entrada. Modificarlas luego para corregir cosas genera catástrofes.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 30/09/2011, 17:09
 
Fecha de Ingreso: mayo-2010
Mensajes: 414
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: numeracion autoincrementada

OK, muchas gracias por tu respuesta.
Me inclino por la primera opcion, voy a ver si logro lo que quiero.
Saludos! y gracias.

Etiquetas: campos, numeracion, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:42.