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

Definir auto_increment

Estas en el tema de Definir auto_increment en el foro de Mysql en Foros del Web. Hola, Es posible definir un campo auto_increment sin que este sea primary key??? Gracias Saludos...
  #1 (permalink)  
Antiguo 03/06/2010, 09:18
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 19 años, 5 meses
Puntos: 4
Definir auto_increment

Hola,

Es posible definir un campo auto_increment sin que este sea primary key???

Gracias

Saludos
__________________
La ficción es y será mi única realidad
  #2 (permalink)  
Antiguo 03/06/2010, 09:28
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: Definir auto_increment

En MySQL NO...
__________________
¿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 03/06/2010, 09:43
 
Fecha de Ingreso: mayo-2009
Mensajes: 76
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Definir auto_increment

si claro que se puede definir como auto incrementable sin que sea llave primaria.

pero la condicion que coloca mysql es que sea INDICE


mira este ejemplo:


Código MySQL:
Ver original
  1. CREATE TABLE tabla (nombre VARCHAR(20), numero INT(10) AUTO_INCREMENT, PRIMARY KEY(nombre),INDEX(numero) )
  #4 (permalink)  
Antiguo 03/06/2010, 12:24
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Definir auto_increment

Es cierto. Pero es sumamente ineficiente. Ya que el primary key crea por defecto un indice y al crear otro indice sobre otro campo serían dos indices que realmente no serían aprovechables.

Mi recomendación es que dejes el auto_increment como primary key con su respectivo indice y al campo nombre uses unique key si lo quue quieres es que los nombres no se repitan.

Código SQL:
Ver original
  1. CREATE TABLE tabla (
  2.                 nombre VARCHAR(20),
  3.                 numero INT(10) PRIMARY KEY AUTO_INCREMENT,
  4.                 UNIQUE KEY(nombre)
  5. );
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 03/06/2010, 12:30
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: Definir auto_increment

Además delo dicho, MySQL omite el uso de la PK en el ordenamiento de la subconsultas cuando hay un campo AUTO_INCREMENT.
Usando tu propio ejemplo:
Código MySQL:
Ver original
  1. CREATE TABLE  `tabla` (
  2.   `nombre` varchar(20) NOT NULL default '',
  3.   `numero` int(10) NOT NULL auto_increment,
  4.   PRIMARY KEY  (`nombre`),
  5.   KEY `numero` (`numero`)
  6.  
  7. INSERT INTO TABLA(NOMBRE)
  8.     VALUES('UNO'), ('DOS'), ('TRES'), ('CUATRO'), ('CINCO');
  9.  
  10. SELECT * FROM TABLA;
  11. +--------+--------+
  12. | nombre | numero |
  13. +--------+--------+
  14. | UNO    |      1 |
  15. | DOS    |      2 |
  16. | TRES   |      3 |
  17. | CUATRO |      4 |
  18. | CINCO  |      5 |
  19. +--------+--------+

Como se puede apreciar, la consulta no se ha ordenado por la columna nombre, que es PK y por tanto debería ser la usada como ordenador (es el modo por default de MySQL), sino por numero, que es auto_increment.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 03/06/2010 a las 13:14
  #6 (permalink)  
Antiguo 03/06/2010, 12:51
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Definir auto_increment

Corrijo un poco lo que dije anteriormente... un unique key también crea un indice implicito.
Pero estoy deacuerdo con gnzsoloyo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 03/06/2010, 14:13
 
Fecha de Ingreso: mayo-2009
Mensajes: 76
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Definir auto_increment

la pregunta solo tiene una respuesta si se puede. de lo demas y optimizaciones esperen a jspcat si tiene mas dudas.


saludos...
  #8 (permalink)  
Antiguo 03/06/2010, 14:15
 
Fecha de Ingreso: mayo-2009
Mensajes: 76
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Definir auto_increment

y agrego algo mas. MySQL es mas optimo consultado campos Numericos.
  #9 (permalink)  
Antiguo 04/06/2010, 01:16
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 19 años, 5 meses
Puntos: 4
Respuesta: Definir auto_increment

Hola,

En primer lugar muchisimas gracias por las respuestas.

Mi caso es el siguiente, imaginemos un pedido, tienes una tabla para el pedido, tienes una tabla de articulos y creas la tabla para relacionar articulos con el pedido, en donde lo logico es que la id del articulo y la id del pedido sean Primary Key.
Hasta aqui todo normal.
El problema es que la estructura en la que la estoy haciendo (y que me tengo que adaptar) exige que las tablas tengan una clave NombreTabla_PK, entonces he pensado si se ha de tener aprovecharla para cargar los pedidos, pero no tiene ningun sentido que sea primary key pues se podria repetir 1-pedido1-articulo1 y 2-pedido1-articulo1. Pero claro pra aprovecharla si necesito que sea auto_increment.

Visto lo que me han propuesto puedo pooner como key el NombreTabla_PK asi puede ser auto_increment

O poner esa como primary_key pero con los ids (Id_articulo,Id_pedido) como unique, si se puede hacer claro

Que me recomendais???

Un saludo y gracias
__________________
La ficción es y será mi única realidad

Etiquetas: definir
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 12:52.