Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Vicente en 07 de Septiembre de 2004, 04:48:07 PM

Título: Mysql
Publicado por: Vicente en 07 de Septiembre de 2004, 04:48:07 PM
 Hola,

no va mu relacionado con los juegos la verdad... Tengo una tabla en mysql llamada por ejemplo:

a-b

Si intento:

ALTER TABLE a-b RENAME TO a_b

Me da el siguiente error:

Syntax error or access violation: You have an error in your SQL syntax near -b RENAME TO a_b at line 1

Llevo un monton intentando arreglarlo y buscando en google, pero no se que pasa... :S Si alguien mu puede echar un cable me haría un gran favor. Un saludo!

Vicente

P.D.: si, estoy un poco verde en bases de datos...
Título: Mysql
Publicado por: sés en 07 de Septiembre de 2004, 04:56:56 PM
 No tengo ni idea, ¿pero no te estará tomando el guión como un signo menos?
La verdad es que usar guiones para nombres de objetos...

[edit]
Supongo que la solución (si es que es eso) será como lo de poner entre comillas los nombres largos o con espacios de MS-DOS.
[/edit]
Título: Mysql
Publicado por: Vicente en 07 de Septiembre de 2004, 04:58:06 PM
 Eso parece, que me lo está tomando como un signo menos, pero es que no se como leches escaparlo... (el marron del signo menos me lo han dado asi, si es por mi no le pongo ese nombre ;)). Un saludo!

Vicente
Título: Mysql
Publicado por: Lucas333 en 07 de Septiembre de 2004, 04:59:13 PM
 de mysql ando algo verde pero ese RENAME.......me parece q no es del todo correcto
No debe usarse una sentencia ALTER TABLE en una tabla que está siendo referenciada, si se quiere modificar el esquema de la tabla, se recomienda eliminar la tabla y volverla a crear con el nuevo esquema. Cuando MySQL hace un ALTER TABLE, puede que use de manera interna un RENAME TABLE, y por lo tanto, se confundan las restricciones de clave foránea que se refieren a la tabla. Esta restricción aplica también en el caso de la sentencia CREATE INDEX, ya que MySQL la procesa como un ALTER TABLE. pero supongo q alguno de los expertol del canal te lo podran confirmar  :P  
Título: Mysql
Publicado por: Vicente en 07 de Septiembre de 2004, 05:03:28 PM
 Ya, pero no puedo cargarme la tabla, que se me van a freir esparragos los datos... Necesito cambiar el nombre porque al que referencio desde muchos sitios es al que tiene "_" en vez de "-" (me va a tocar lo otro como me lo huelo...). Un saludo!

Vicente
Título: Mysql
Publicado por: Lucas333 en 07 de Septiembre de 2004, 05:05:08 PM
 solo te puedo decir q yo siempre me tocaba borrar la tabla y volver a crearla eso de RENAME no lo recuerdo .........aunque desde q termine la carrera poco de base de datos he tocado estop tb es verdad  :rolleyes:  
Título: Mysql
Publicado por: AgeR en 07 de Septiembre de 2004, 05:07:17 PM
 Siempre puedes copiar la tabla a otra con otro nombre, renombrar la nueva (una vez veas que los datos son correctos) y borrar la vieja.
Prueba la solución que te comenta sés también a ver.

PD : Vaya nombrecito de tabla más...  (asco)  
Título: Mysql
Publicado por: Vicente en 07 de Septiembre de 2004, 05:11:52 PM
 Hola! He probado lo de las compillas (simples y dobles) y nada, a escribir la tabla a golpe de codigos ascii,... nada. Tampoco puedo copiarla, cualquier operacion contra esa tabla peta en el "-". Gracias de todas formas... (como pille al que puso el nombre lo rajo). Un saludo!

Vicente
Título: Mysql
Publicado por: CoLSoN2 en 07 de Septiembre de 2004, 06:56:45 PM
 saluda al merluzo que puso ese nombre de mi parte
Título: Mysql
Publicado por: Repoker en 07 de Septiembre de 2004, 08:45:07 PM
 Prueba con el carácter de escape "\", tal vez es que te lo está interpretando como un símbolo y no como texto, que es lo que quieres... si cuela te ahorras un currito :P
Título: Mysql
Publicado por: shephiroth en 07 de Septiembre de 2004, 09:40:00 PM
 Muy buenas.

Olvidaros del -, q no tiene nada q ver.

[MODE TUTOR ON]

ALTER TABLE se utiliza para modificar la estructura de una tabla, no se puede cambiar su nombre. Es decir, solo nos deja operar con 5 opcion que son:
ADD COLUMN
ALTER COLUMN
DROP COLUMN
ADD CONSTRAINT
DROP CONSTRAINT

Para solucionar el problema te recomiendo hacer lo siguiente

1) Crear una tabla con el nuevo nombre con la misma estructura interna (si hay algo diferente no funcionará), mucho ojo con el orden de los campos

2) Copiar los datos con la siguiente instruccion:

INSERT INTO nombre_tabla_nuevo (campos y demas) FROM SELECT * FROM nombre_tabla_vieja

[EDITADO ON]
Si el orden de los campos no es el mismo, en vez de utilizar select * pones los campos en el orden oportuno y ya esta  :D
[EDITADO OUT]

Si quieres comprueba que estan todos los datos y no se ha dejado ninguna por ejemplo con esta linea:

SELECT (select count(*) from tabla_vieja) AS VIEJA, (select count(*) from tabla_nueva) AS NUEVA

Si te sale el mismo numero en ambas, tienes todos los registros en orden xDD

[MODE TUTOR OFF]

Weno, y de aqui a la cama, que ya trabaje suficiente desempolvando los viejos libros (weno, no tan viejos, de hace 6 meses xDD)

SALUDOS ^^
Título: Mysql
Publicado por: Jond en 08 de Septiembre de 2004, 09:09:56 AM
 Hola Vicente,

la sql que intentas ejecutar si que es correcta,
lo que ocurre que cuando quieres hacer
referencia a una tabla con caracteres extraños
en su nombre debes hacelo entre acento
abierto (no entre comillas simples)  `

El que esta a la derecha de la p.

Se saca pulsando a la tecla del acento y luego
un espacio.

Por lo que la sentencia seria:

ALTER TABLE `a-b` RENAME TO a_b

Por lo menos asi, si que me funciona
en mi versión de mysql.
Título: Mysql
Publicado por: Vicente en 08 de Septiembre de 2004, 02:09:58 PM
 Hola! Quien iba a pensar que el caracter para los caracteres extraños fuera `  O_O

Ya funciona! La de curro que me habéis ahorrado, muchisimas gracias a todos. Estais invitados a una ciberbirra ;)

Un saludo!

Vicente