Ver Mensaje Individual
  #5 (permalink)  
Antiguo 29/08/2009, 06:24
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: pregunta sobre primary key en mysql

Cita:
mi primer duda es aca esto que hago funciona ya que en donde iria "idusuario" lo dejo con las comas pero vacio y en la base de datos me hace el auto increment pero realmente se hace de esta forma ?? o es un invento mio?.
Un campo PK es un campo que cuyo valor jamás puede ser NULL, por lo que en ocasiones esto produce ciertas confusiones a la hora de usar AUTO_INCREMENT. En lo que a MySQL se refiere, el valor en innecesario al momento de insertar un registro nuevo, por lo cual lo que se debe hacer es omitir el campo en el INSERT y no poner valor alguno en el VALUE. El mismo MySQL administrará los valores secuenciales correspondientes. Lo que puede estar sucediendo es que el punto que pones lo convierte implicitamente en un número, pero como está definido como INT y el punto corresponde a DECIMAL, el resultado de la conversión es NULL, por lo cual actúa el AUTO_INCREMENT.
En realidad, lo que debes hacer es indicar qué campos ingresarás y poner sólo esos valores, omitiendo el ID. Es más simple y te aseguras no poner nada que no vaya. El resto lo maneja MySQL.
El detalle a considerar es que el uso de un AUTO_INCREMENT no implica que no puedas mandar un valor, pero ten en cuenta que si pones un valor mucho mayor qe el último ID, el resto de los que se ingresen tomarán a ése como valor base y seguirán a partir de él. Esto hará que existan un "hueco" de numero atrás, que si bien es accesible, no lo llenará el MySQL por sí mismo.
Cita:
despues cuando en la pagina quiero mostrar sus datos ya que el usuario se logeo si el login fue correcto el "username" de la tabla "login" es el mismo que pone en el form y pasa lo mismo con el password o sea esos datos ya los tengo pero si quiero mostrar el emeil lo uqe yo hago es.

buscar el "idusuario" en login donde username = $username y despues con el "idusuario" busco el "emeil" en datos donde "idusuario" = a la respuesta anterior.

esto tambien funciona perfecto pero de esta forma es lo mismo que sea PK o no.
Estás en lo cierto: Una PK no es necesariamente numérica, y ni siquiera es incremental. Una PK es un campo o conjunto de campos cuyo valor se usa para identificar unívocamente un registro en una tabla y que cumple con estas condiciones:
1) Tiene que ser un valor único e irrepetible.
2) No puede ser NULL..
El uso de valores de PK numéricos son una solución sencilla en muchos casos por desconocimiento, por normalización o por requerimiento. Pero no es la única posibilidad.
En el caso de los USUARIOS, lo recomendable es usar el username como PK, ya que cumple con los requisitos mínimos, y no requiere segundas validaciones.
Recuerda que una PK puede ser de cualquier tipo de datos (excepto TEXT, BLOB o campos de ese tipo), aunque no es recomendable usar TINYINT, SMALLINT o MEDIUMINT por su rango reducido, ni tampoco valores con signo sino UNSIGNED, porque sino se pierde la mitad del rango, puesto que un AUTO_INCREMENT da siempre valores positivos y no negativos.
Para tu caso, si el mismo usernamre se usa para loguear al usuario contra MySQL, yo usaría el mismo username en tu web, ya que de esa forma tendrías doble certificación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)