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

pregunta sobre primary key en mysql

Estas en el tema de pregunta sobre primary key en mysql en el foro de Mysql en Foros del Web. hola alguien me podria explicar bien como funciona en mysql lo de primary key o algun tutorial y como se relacionan las diferentes tablas a ...
  #1 (permalink)  
Antiguo 28/08/2009, 08:12
Avatar de intiweb  
Fecha de Ingreso: mayo-2009
Ubicación: Capital Federal
Mensajes: 363
Antigüedad: 14 años, 11 meses
Puntos: 5
pregunta sobre primary key en mysql

hola alguien me podria explicar bien como funciona en mysql lo de primary key o algun tutorial y como se relacionan las diferentes tablas a traves del primary key
no logro que mis tablas tengan relacion entre ellas
  #2 (permalink)  
Antiguo 28/08/2009, 08:32
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: pregunta sobre primary key en mysql

El funcionamiento de las PK en MySQL es en esencia igual que en todos los DBMS, ya que parte del estandar de SQL. Las singularidades del comportamiento en MySQL son menores, por lo que a menos que sean problemas muy específicos (como intentar crear una con un campo TEXT o BLOB) no tienen mayor importancia.
Sería más práctico que nos postearas la estructura de tus tablas, y que nos aclararas qué mensajes de error o qué problemas se producen y qué es lo que quieres lograr. De esa forma podríamos saber dónde falla la cosa sin tener que entrar en teorizaciones.
__________________
¿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 28/08/2009, 17:44
Avatar de intiweb  
Fecha de Ingreso: mayo-2009
Ubicación: Capital Federal
Mensajes: 363
Antigüedad: 14 años, 11 meses
Puntos: 5
Respuesta: pregunta sobre primary key en mysql

no no tengo fallas pero estoy aprendiendo y queria entender bien eso a profundidad,
yo hise 5 tabas y a todas les puse un campo llamado idusuario.
en todas las tablas este campo es autoincrement, INT y PK.
en las consultas cuando la gente se registra puse por ejemplo.
insert into login (' "." ', ' ".$username." ', ' ".$password." ') les deje la instancia donde va el id vacio no se si esta bien pero funciona en la base de datos me aparese asi:
idusuario | username | password
1 laouen
  #4 (permalink)  
Antiguo 28/08/2009, 19:04
Avatar de intiweb  
Fecha de Ingreso: mayo-2009
Ubicación: Capital Federal
Mensajes: 363
Antigüedad: 14 años, 11 meses
Puntos: 5
Respuesta: pregunta sobre primary key en mysql

lo de arriba se apreto sin querer enter y quedo mal redactado perdon
aca lo mado posta.

yo tengo por ejemplo una base de datos "registros" que tiene 2 tablas "login","datos"(es un ejemplo) .

en las dos tablas tengo un campo "idusuario" que es PK, autoincrement, INT
login "idusuario","username","password".
datos "idusuario","datos".

cuando alguien se registra mediante dos consultas coloco los datos.
insert into login (' "." ',' ".$username." ',' ".$password." ')
insert into datos (' "." ',' ".$emeil." ')

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?.

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.
supongo que deve de haver una forma mucho mas sencilla de hacer esto usando el PK por eso quiero que me expliquen bien como funciona todo lo del PK(primary Key)
si alguin me puede alludar o mostrarme un tutorial del tema se lo re agradesco
  #5 (permalink)  
Antiguo 29/08/2009, 06:24
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: 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)
  #6 (permalink)  
Antiguo 29/08/2009, 12:26
Avatar de intiweb  
Fecha de Ingreso: mayo-2009
Ubicación: Capital Federal
Mensajes: 363
Antigüedad: 14 años, 11 meses
Puntos: 5
Respuesta: pregunta sobre primary key en mysql

muchas gracias gnzsoloyo tu respuesta fue perfecta entonces es como yo decia es solo un campo mas solo que cumple las dos conduciones de no repetirse nunca y de no ser null despues lo tengo que usar como otro campo muchisimas gracias
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 04:40.