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

primary key compuesta - auto_increment

Estas en el tema de primary key compuesta - auto_increment en el foro de Mysql en Foros del Web. hola, me gustaria saber si hay una forma de que en una tabla se pueda tener lo siguiente: los primary key de la tabla innodb ...
  #1 (permalink)  
Antiguo 23/07/2011, 08:43
 
Fecha de Ingreso: abril-2010
Mensajes: 36
Antigüedad: 14 años
Puntos: 2
Pregunta primary key compuesta - auto_increment

hola, me gustaria saber si hay una forma de que en una tabla se pueda tener lo siguiente:

los primary key de la tabla innodb serian cod_em y cod, donde cod_em viene de otra tabla y cod vendria a ser el una llave auto_increment, pero quisiera saber si es posible mostrarlo de la siguiente forma.

Código HTML:
Ver original
  1. | cod_em | cod | text |
  2. -----------------------
  3. |    1   |  1  | text |
  4. |    1   |  2  | text |
  5. |    1   |  3  | text |
  6. |    2   |  1  | text |
  7. |    2   |  2  | text |
  8. |    2   |  3  | text |

seria posible que el auto_increment dependa del primer campo cod_em?
si no es posible, hay alguna forma de hacerlo?

muchas gracias
  #2 (permalink)  
Antiguo 23/07/2011, 09:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: primary key compuesta - auto_increment

No se entiende mucho por qué tienes esa duda.
Es obvio (ver notas delmanual de referencia más abajo) que si se puede desde el momento en que así trabajan todos los DBMS relacionales (RDBMS), y MySQL lo es con tablas InnoDB.
Simplemente debes crear la PK con esa definición: con ambos campos.
Ahora bien, como una parte de la clave es FK, debes, al mismo tiempo, definir ese campo como FK de la tabla de la que dependa.

Toma el manual y hazlo. Después nos cuentas qué tal te fue:
3.6.6. Usar claves foráneas (foreign keys)
15.6.4. Restricciones (constraints) FOREIGN KEY

Sobre la PK:
Cita:
KEY normalemente es sinónimo para INDEX. En MySQL 5.0, el atributo clave PRIMARY KEY puede especificarse como KEY cuando se da en una definición de columna. Esto se implementó por compatibilidad con otros sistemas de bases de datos.

En MySQL, un índice UNIQUE es uno en que todos los valores en el índice deben ser distintos. Ocurre un error si intenta añadir un nuevo registro con una clave que coincida con un registro existente. La excepción es que una columna en el índice puede contener valores NULL , puede contener valores NULL múltiples. Esta excepción no se aplica a tablas BDB , en las que una columna indexada le permita un único NULL.

Una PRIMARY KEY es una KEY única donde todas las columnas de la clave deben definirse como NOT NULL. Si no se declaran explícitamente como NOT NULL, MySQL las declara implícitamente ( y sin decirlo ) . Una tabla puede tener sólo una PRIMARY KEY. Si no tiene una PRIMARY KEY y una aplicación pide una PRIMARY KEY en sus tablas, MySQL retorna el primer índice UNIQUE que no tenga columnas NULL como la PRIMARY KEY.

En la tabla creada, una PRIMARY KEY se guarda en primer lugar, seguida por todos los índices UNIQUE, y luego los índices no únicos. Esto ayuda al optimizador MySQL a priorizar qué indice usar y también detectar más rápido claves UNIQUE duplicadas.

Una PRIMARY KEY puede ser un índice de múltiples columnas. Sin embargo, no puede crear un índice de múltiples columnas usando el atributo de clave PRIMARY KEY en una especificación de columna. Hacerlo sólo marca la columna como primaria. Debe usar una cláusula PRIMARY KEY(index_col_name, ...) separada.

Si un índice PRIMARY KEY o UNIQUE consite sólo de una columna que tenga un tipo entero, puede referirse a la columna como _rowid en comandos SELECT.

En MySQL, el nombre de una PRIMARY KEY es PRIMARY. Para otros índices, si no asigna un nombre, el índice tieen el mismo nombre que la primera columna indexada, con un sufijo opcional (_2, _3, ...) para hacerlo único. Puede ver los nombres de índice para una tabla usando SHOW INDEX FROM tbl_name. Consulte Sección 13.5.4.11, “Sintaxis de SHOW INDEX”.
__________________
¿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 06/09/2011, 11:40
Avatar de Ronin46  
Fecha de Ingreso: junio-2009
Mensajes: 398
Antigüedad: 14 años, 9 meses
Puntos: 8
Respuesta: primary key compuesta - auto_increment

Hola,

Una de tres, o no he entendido bien la pregunta, o no he entendido bien la respuesta, o la respuesta no es acorde con lo que se pregunta.

Pongamos por caso una tabla de apuntes contables, la tabla estaría formada por varios campos, entre ellos un ID de asiento y un ID de apunte, estos 2 campos formarían la clave primaria.

Ahora bien, matices, el ID de asiento es una clave foránea, hay que crear la correspondiente relación, y el ID de apunte es un autoincremental por cada ID de asiento (queda muy bien reflejado en el ejemplo que puso el usuario que hizo la pregunta).

Problema, que MySQL no te deja especificar como autoincremental el campo ID de apunte y a su vez que forme la clave primaria con el ID de asiento. A no ser, claro está, que esté haciendo mal la cosa.

Dicho esto, entiendo que el autoincremental de ID de apunte por cada ID de asiento debe de ser gestionado de forma manual según cada uno considere oportuno, pero nunca te lo va a gestionar automáticamente MySQL como sí hace con las claves primarias de un sólo elemento en el que éste es autoincremental.

Saludos.
__________________
http://www.controldegastos.com, acepto sugerencias para el sitio.
Repetir conmingo: "tengo que dedicar más tiempo a gozar de placer"
  #4 (permalink)  
Antiguo 08/09/2011, 07:10
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: primary key compuesta - auto_increment

Totalmente de acuerdo Ronin46 excepto en esto

Cita:
Problema, que MySQL no te deja especificar como autoincremental el campo ID de apunte y a su vez que forme la clave primaria con el ID de asiento. A no ser, claro está, que esté haciendo mal la cosa.
Si puedes definir un auto incremental que forme parte de una clave primaria compuesta, pero el auto incremental serà un conteo continuo, es decir en tu ejemplo no va a reiniciarse en cada asiento....

Pero eso nos da la solución al problema, puesto que el ID del apunte no sirve para nada excepto para ordenar los apuntes en el asiento, luego un incremental continuo ya sirve...siempre que se mantenga el orden de entrada, si se puede alterar ese orden ya no sirve....

Si por estetica se quieren mostrar los apuntes numerados del 1 al que sea en cada caso se puede montar un contador en el momento de generar la salida...

En qualquier caso NO SE PUEDE hacer depender el valor de un auto incremental al valor de otro campo.

Un auto incremental siempre es el valor incrementado en uno del valor guardado en los metadatos de la tabla, es decir si se borra el ultimo registro supongamos que teniel el valor 100 y a continuació insertamos otro registro este tendrà el valor 101....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 08/09/2011 a las 07:19
  #5 (permalink)  
Antiguo 10/09/2011, 20:01
Avatar de Ronin46  
Fecha de Ingreso: junio-2009
Mensajes: 398
Antigüedad: 14 años, 9 meses
Puntos: 8
Respuesta: primary key compuesta - auto_increment

Cita:
Iniciado por quimfv Ver Mensaje
Si puedes definir un auto incremental que forme parte de una clave primaria compuesta, pero el auto incremental serà un conteo continuo, es decir en tu ejemplo no va a reiniciarse en cada asiento....
Llevas razón, la verdad es que me expliqué bastante mal ahora que lo releo.
Cita:
Iniciado por quimfv Ver Mensaje
Si por estetica se quieren mostrar los apuntes numerados del 1 al que sea en cada caso se puede montar un contador en el momento de generar la salida...
En efecto, aquí ya entraríamos en el método que cada uno considere oportuno, pero desde luego no pasa por declarar un campo de la clave como foráneo y el otro como autoincremental.
__________________
http://www.controldegastos.com, acepto sugerencias para el sitio.
Repetir conmingo: "tengo que dedicar más tiempo a gozar de placer"
  #6 (permalink)  
Antiguo 10/09/2011, 20:04
Avatar de Ronin46  
Fecha de Ingreso: junio-2009
Mensajes: 398
Antigüedad: 14 años, 9 meses
Puntos: 8
Respuesta: primary key compuesta - auto_increment

Cita:
Iniciado por quimfv Ver Mensaje
Si puedes definir un auto incremental que forme parte de una clave primaria compuesta, pero el auto incremental serà un conteo continuo, es decir en tu ejemplo no va a reiniciarse en cada asiento....
Estaba repasando el tema y me puse a hacer pruebas... ¿seguro que sí puedes?
__________________
http://www.controldegastos.com, acepto sugerencias para el sitio.
Repetir conmingo: "tengo que dedicar más tiempo a gozar de placer"
  #7 (permalink)  
Antiguo 10/09/2011, 20:11
Avatar de Ronin46  
Fecha de Ingreso: junio-2009
Mensajes: 398
Antigüedad: 14 años, 9 meses
Puntos: 8
Respuesta: primary key compuesta - auto_increment

Cita:
Iniciado por Ronin46 Ver Mensaje
Estaba repasando el tema y me puse a hacer pruebas... ¿seguro que sí puedes?
Sí, si se puede, lo que pasa que hay que hacerlo en un determinado orden (al menos usando el modo gráfico de PHPMyAdmin.
__________________
http://www.controldegastos.com, acepto sugerencias para el sitio.
Repetir conmingo: "tengo que dedicar más tiempo a gozar de placer"

Etiquetas: compuesta, key, primary, 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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 13:14.