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

indices en mysql

Estas en el tema de indices en mysql en el foro de Mysql en Foros del Web. hola amigos, ¿como hago para eliminar una clave primaria ?¿porke no me funciona "DROP INDEX PRIMARY ON tabla1'? ¿Y para mostrar todos los indices de ...
  #1 (permalink)  
Antiguo 15/02/2016, 13:30
 
Fecha de Ingreso: diciembre-2007
Mensajes: 299
Antigüedad: 16 años, 11 meses
Puntos: 2
indices en mysql

hola amigos,
¿como hago para eliminar una clave primaria?¿porke no me funciona "DROP INDEX PRIMARY ON tabla1'?

¿Y para mostrar todos los indices de la tabla?

Gracias, saludos:D
__________________
1os pasaos con xAMP en Windows
programando en PERL
  #2 (permalink)  
Antiguo 15/02/2016, 14: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: indices en mysql

Partamos de una base: Toda tabla debe, obligatoriamente, tener clave primaria. NO es una cosa que puedas borrar por que si.
De hecho, en BBDD relacionales, una tabla sin PK es una bolsa de datos-basura. Literalmente.

¿Por qué quieres borrarla? ¿Qué es lo que quieres hacer?

Lo segundo es simple: Lee el manual de referencia...

http://dev.mysql.com/doc/refman/5.7/en/show-index.html

Es lo que hacemos todos cuando trabajamos en BBDD.
__________________
¿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 15/02/2016, 15:05
 
Fecha de Ingreso: diciembre-2007
Mensajes: 299
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: indices en mysql

lo k kiero es redefinirla, y para ello necesito borrarla antes(desconozco si al crearla de nuevo se borra la anterior). En clase utilizamos DROP INDEX PRIMARY ON t1, pero me da un error de sintaxis "near '"primary" on t1"
__________________
1os pasaos con xAMP en Windows
programando en PERL
  #4 (permalink)  
Antiguo 15/02/2016, 15:35
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: indices en mysql

To drop a primary key, the index name is always PRIMARY, which must be specified as a quoted identifier because PRIMARY is a reserved word:

Código MySQL:
Ver original
  1. DROP INDEX `PRIMARY` ON t;

http://dev.mysql.com/doc/refman/5.7/en/drop-index.html
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 16/02/2016, 05:12
 
Fecha de Ingreso: diciembre-2007
Mensajes: 299
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: indices en mysql

mysql> describe t1;
+-------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------------------+------+-----+---------+----------------+
| id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
....................................
....................
..........

+-------+----------------------+------+-----+---------+----------------+
7 row in set (0.00 sec)

mysql> drop index `primary` on t1;
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
mysql>

No entiendo porke me da ese error ¿Me lo podeis explicar? Por supuesto, solo tengo una columna auto_increment.

Gracias, saludos:D
__________________
1os pasaos con xAMP en Windows
programando en PERL

Última edición por alfa18; 16/02/2016 a las 06:01
  #6 (permalink)  
Antiguo 16/02/2016, 07:03
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: indices en mysql

No puedes dropear una PK si el campo que es PK es un auto_increment. MySQL exige que todo campo AI sea PK o parte de la PK (PK compuestas).
Para hacer lo que deseas deberás dropear la columna completa, o eliminarle el atributo de AI antes de quitar la PK.

Cita:
lo k kiero es redefinirla
¿Qué es lo que quieres redefinir? ¿La longitud del dato, o quires usar otra PK diferente y descartar el AI.

Por cierto, un AI que sea SMALLINT es un desproposito. Tiene un rango muy pequeño de representació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)
  #7 (permalink)  
Antiguo 16/02/2016, 07:37
 
Fecha de Ingreso: diciembre-2007
Mensajes: 299
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: indices en mysql

efectivamente, lo k fallaba a la hora de borrar la PK era el atributo AI, asi redifini la columna sin el AI:

no se muy bien la diferencia entre modify y change(aparte del formato), ambos permiten cambiar la definicion de una columna ¿¿no?? Hay alguna diferencia(o ventaja) entre ambos??

Ahora ya pude borrar la PK con:
Código MySQL:
Ver original
  1. drop index `primary` on t1;

lo k necesito es crear una clave compuesta id+clase, ¿¿se puede 'añadir' un campo a la PK, o definirla por completo, sin necesidad de eliminar antes la PK??

muy acertado lo de PK de tipo smallint, es solo para mis pruebas, en algo serio nunca seria menor de INT

Gracias gnzsoloyo, saludos:D
__________________
1os pasaos con xAMP en Windows
programando en PERL

Última edición por alfa18; 16/02/2016 a las 08:04
  #8 (permalink)  
Antiguo 17/02/2016, 08:33
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: indices en mysql

Una PK compuesta (se denomina asi cuando la PK se compone de más de una columna) basada en un ID autonumerico más otro dato no es una opción muy buena que digamos. Tienes que tener en cuenta que la PK debe ser única, y debe identificar al registro en forma totalmente consistente.
Esto quiere decir que si la PK la compones de una parte numérica y otro campo mas, ambos campos deben poseer una combinación tal que no pueda llevar a inconsistencias.
Hacer un campo ID+CATEGORIA, por ejemplo, permite usar el mismo numero de ID para N categorías. Te obligaría a realizar validaciones extras para asegurarte la unicidad de la asignación del par de datos, o bien crear un campo declarado UNIQUE... con lo que estarías ante una clave alternativa o candidata, y de esa forma la PK compuesta se vuelve superflua.
La idea es que estos valores de PK serían validos en ese contexto:

Cita:
(1, AAA)
(1, AA)
(1, BB)
(2, AAA)
(3, AAA)
Como podras ver, hay variaciones en uno de los campos de la clave, que generan claves únicas legales.

Es preferible, si vas a trabajar una clave compuesta, que lo hagas con datos propios de la entidad representada, y que puedan validarse como únicos y no nulables.

Dinos cual es la entidad y el caso real, y veamos como te conviene hacer la PK.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: indices, 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 12:44.