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

[SOLUCIONADO] como agregar una primary key (llave primaria)

Estas en el tema de como agregar una primary key (llave primaria) en el foro de Mysql en Foros del Web. hola tengo esta tabla @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original tabla c CREATE TABLE `comentarios` (   `id` int ( 11 ) NOT NULL , ...
  #1 (permalink)  
Antiguo 20/05/2016, 20:28
 
Fecha de Ingreso: diciembre-2015
Mensajes: 369
Antigüedad: 9 años
Puntos: 4
como agregar una primary key (llave primaria)

hola tengo esta tabla
Código MySQL:
Ver original
  1. tabla c
  2. CREATE TABLE `comentarios` (
  3.  `id` int(11) NOT NULL,
  4.  `aut` varchar(100) COLLATE utf8_spanish_ci NOT NULL,
  5.  `c` text COLLATE utf8_spanish_ci NOT NULL,
  6.  `fecha` varchar(20) COLLATE utf8_spanish_ci NOT NULL,
  7.  `ip` varchar(20) COLLATE utf8_spanish_ci NOT NULL
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci

y quiero poner id como primaria

ya intente con con
Código MySQL:
Ver original
  1.      `id`);

este es el error que me imprime
#1091 - Can't DROP 'PRIMARY'; check that column/key exists
  #2 (permalink)  
Antiguo 20/05/2016, 23:04
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: como agregar una primary key (llave primaria)

DROP es para ELIMINAR. No para agregar.

El mensaje dice que verifique que exista la PK, porque no la puede encontrar para borrarla.

Por cierto, Tienes el campo "fecha" MUY MAL DEFINIDO.. Tiene que ser DATE, DATETIME o TIMESTAMP. No hagas cosas que luego te traerán problemas.
__________________
¿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; 20/05/2016 a las 23:22
  #3 (permalink)  
Antiguo 29/05/2016, 18:59
 
Fecha de Ingreso: diciembre-2015
Mensajes: 369
Antigüedad: 9 años
Puntos: 4
Respuesta: como agregar una primary key (llave primaria)

amigo y como puedo solucionar esto eh buscado y no encuentro como hacerlo

y la fecha la introduzco con esta función date('d-m-Y H:i:s'); esta mal ?
  #4 (permalink)  
Antiguo 30/05/2016, 04:10
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: como agregar una primary key (llave primaria)

Creí que se entendía claramente que lo que tenias que hacer es QUITAR ese DROP que has puesto, que no corresponde en esa sentencia.

Lo segundo, es que tienes que poner correctamente el tipo de columna en la fecha, por ejemplo DATETIME, y a nivel programación, pasar la fecha e su correcto formato "AAAA-MM.DD HH:mm:ss", que si miras lo que usas te podrás dar cuenta claramente qué tienes que modificarle... .¿No te parece?

Finalmente, ¿Por qué no defines la PK directamente en el CREATE?
Código MySQL:
Ver original
  1. CREATE TABLE `comentarios` (
  2.  `id` int(11) NOT NULL PRIMARY KEY,
  3.  `aut` varchar(100) COLLATE utf8_spanish_ci NOT NULL,
  4.  `c` text COLLATE utf8_spanish_ci NOT NULL,
  5.  `fecha`DATETIME NOT NULL,
  6.  `ip` varchar(20) COLLATE utf8_spanish_ci NOT NULL
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci

A nivel buenas prácticas:
1) NO uses campos denominados "id", ponles un nombre más característico: ID_COMENTARIO, por ejemplo. Caso contrario tarde o temprano tendrás problemas en la redacción de las consulta debido a joins incorrectos (si los usas implícitos).
2) Nunca uses una sola letra para columnas. Pueden terminar chocando contra los alias que uses, y además no dicen NADA, es decir que no son claros. UN campo "C" en lugar de ponerles "comentarios", es un defecto de diseño.
3) No abrevies en exceso o demasiado poco. A los campos ponles los nombres claros. "AUT", por no poner "autor"... francamente.
4) En diseños de este tipo, los autores se manejan en tablas separadas, salvo que tengas una de anonimos. Habria que ver el diseño, pero para autorías de comentarios en un sistema d e foros, no se ponen los nombres de los autores sino los ID de usuarios... con su correspondiente definición de FK.
__________________
¿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/05/2016, 04:11
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: como agregar una primary key (llave primaria)

Creí que se entendía claramente que lo que tenias que hacer es QUITAR ese DROP que has puesto, que no corresponde en esa sentencia.

Lo segundo, es que tienes que poner correctamente el tipo de columna en la fecha, por ejemplo DATETIME, y a nivel programación, pasar la fecha e su correcto formato "AAAA-MM.DD HH:mm:ss", que si miras lo que usas te podrás dar cuenta claramente qué tienes que modificarle... .¿No te parece?

Finalmente, ¿Por qué no defines la PK directamente en el CREATE?
Código MySQL:
Ver original
  1. CREATE TABLE `comentarios` (
  2.  `id` int(11) NOT NULL PRIMARY KEY,
  3.  `aut` varchar(100) COLLATE utf8_spanish_ci NOT NULL,
  4.  `c` text COLLATE utf8_spanish_ci NOT NULL,
  5.  `fecha`DATETIME NOT NULL,
  6.  `ip` varchar(20) COLLATE utf8_spanish_ci NOT NULL
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci

A nivel buenas prácticas:
1) NO uses campos denominados "id", ponles un nombre más característico: ID_COMENTARIO, por ejemplo. Caso contrario tarde o temprano tendrás problemas en la redacción de las consulta debido a joins incorrectos (si los usas implícitos).
2) Nunca uses una sola letra para columnas. Pueden terminar chocando contra los alias que uses, y además no dicen NADA, es decir que no son claros. UN campo "C" en lugar de ponerles "comentarios", es un defecto de diseño.
3) No abrevies en exceso o demasiado poco. A los campos ponles los nombres claros. "AUT", por no poner "autor"... francamente.
4) En diseños de este tipo, los autores se manejan en tablas separadas, salvo que tengas una de anonimos. Habria que ver el diseño, pero para autorías de comentarios en un sistema d e foros, no se ponen los nombres de los autores sino los ID de usuarios... con su correspondiente definición de FK.
__________________
¿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 30/05/2016, 10:14
 
Fecha de Ingreso: diciembre-2015
Mensajes: 369
Antigüedad: 9 años
Puntos: 4
Respuesta: como agregar una primary key (llave primaria)

Uff que no se mucho la verdad todo lo creó con phpadmin pero ya tengo la tabla creada.
Como puedo adherir una nueva columna auto_increment porque la tabla que tengo no tiene auto_increment la hice de prueba y ahora quiero agregarsela.

En cuanto a la fecha no se com manejar date time que puedo hacer quitarle la función date('d-m-Y H:i:s'); y agregar en la columna un DATEtime por el varchar y por si solo se llenará cada vez que inserte la información?
  #7 (permalink)  
Antiguo 30/05/2016, 10:30
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 23 años, 1 mes
Puntos: 655
Respuesta: como agregar una primary key (llave primaria)

Es mejor que busques referencia de SQL básico en la red para que sepas lo que estas haciendo.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #8 (permalink)  
Antiguo 30/05/2016, 10:46
 
Fecha de Ingreso: diciembre-2015
Mensajes: 369
Antigüedad: 9 años
Puntos: 4
Respuesta: como agregar una primary key (llave primaria)

Ya encontre como hacerlo solo tenían que decirme el codigo asi aprendo

codigo Mysql

aprendi solo con verlo que alter table = altera la table
ADD = aderir
int = tipo
INT UNSIGNED = atributo
NOT NULL = esto no se :P
AUTO_INCREMEN = propiedad para aumentar por cada ingreso
primary key = llave primaria
lo que me encuentro dificil de este lenguaje es que no pone coma en cada atributo que se le agrega
  #9 (permalink)  
Antiguo 30/05/2016, 10:55
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: como agregar una primary key (llave primaria)

Cita:
Iniciado por wilson_romero Ver Mensaje
lo que me encuentro dificil de este lenguaje es que no pone coma en cada atributo que se le agrega
No son comas por cada atributo en ese caso. No son atributos lo que estás agregando, sino qu ees un único atributo, que lleva todas esas cláusuas.

Por lo demás, se aprecia y admira la proactividad; regalar soluciones precocinadas no te habría hecho aprender lo que has aprendido... Sólo habrías copiado, sin entenderlo.

Posdata:

Cita:
En cuanto a la fecha no se com manejar date time que puedo hacer quitarle la función date('d-m-Y H:i:s');
Aqui tendrías al menos que darte cuenta que "d-m-Y" es la abreviatura de "day-month-YEAR", por lo que si te digo que debes formatear la fecha para que MySQL lo acepte bien, respetando el formato "AAAA-MM-DD", creo que podrías deducir por tu propia cuenta que el formato será "Y-m-d", ¿no es así?...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 30/05/2016, 11:23
 
Fecha de Ingreso: diciembre-2015
Mensajes: 369
Antigüedad: 9 años
Puntos: 4
Respuesta: como agregar una primary key (llave primaria)

es que no se si poner solo en l a base de datos el type en DATEtime y por si solo cada vez que introduzca información se agregara solo.
tampoco entiendo lo de formatear la fecha el la función date('d-m-Y H:i:s');
se graba de la misma manera que dijiste lo de la abreviatura pero por que es mejor usar en la tabla el tipo datetime que introducirlo con una función yo lo que veo ventajoso es que usaría menos código.
  #11 (permalink)  
Antiguo 30/05/2016, 11:31
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: como agregar una primary key (llave primaria)

Cita:
es que no se si poner solo en l a base de datos el type en DATEtime y por si solo cada vez que introduzca información se agregara solo.
No existen las acciones automágicas, Wilson. La base de datos no hará nada que no le digas que haga.

En todo caso, si , existe una posibilidad para que ingrese ese valor por default, pero para eso el campo debe ser TIMESTAMP y darsele un valor DEFAULT. Es medio traicionero, porque el valor por default será el del sistema operativo en el servidor donde está la base, y no en el cliente.
Sería preferible en ese caso que el INSERT asigne un NOW() para ese campo, harcodeado en la consulta. SI necesitas el valor del cliente, no te queda mas remedio que pasarlo como parámetro desde el formulario.
Puedes verlo detalladamente en el manual de referencia.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 30/05/2016, 11:59
 
Fecha de Ingreso: diciembre-2015
Mensajes: 369
Antigüedad: 9 años
Puntos: 4
Respuesta: como agregar una primary key (llave primaria)

Muchas gracias

Etiquetas: fecha, key, llave, 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.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:10.