feb 18 2012

Cómo renombrar una tabla en Firebird

Hoy necesité renombrar una tabla en Firebird. Por lo general lo hago en otras bases de datos (que por cierto no suele ser tan fácil en la mayoría de motores de bases de datos) y Firebird no es la excepción, pero encontré la respuesta para casos en que no haya otra opción (que son muy pocos a decir verdad).

NOTA: No hacer COMMIT hasta que no se hayan ejecutado AMBOS comandos.

UPDATE RDB$RELATIONS
 SET RDB$RELATION_NAME='NEWNAME' where
 RDB$RELATION_NAME='OLDNAME';
UPDATE RDB$RELATION_FIELDS
 SET RDB$RELATION_NAME='NEWNAME' where
 RDB$RELATION_NAME='OLDNAME' and
 RDB$SYSTEM_FLAG=0;

Se hace COMMIT y listo, tabla renombrada. Cabe agregar que después de hacer la prueba noté que las llaves (incluyendo la primaria) y los contraints se habían perdido, así que necesitaremos recrearlos en caso de ser necesario.

Pienso que se debería hacer en un caso MUY extremo, por lo demás, es más fácil (y seguro) pasar los datos a otra tabla con el nuevo nombre.

Fuente: DevShed


feb 16 2012

Ordenar campos con valores NULL en MySQL: Por qué los NULL primero

Ordenar campos en una base de datos no suele ser problema en ningún motor hasta que llegamos a MySQL, precisamente hoy me encontré con ese problema, porque necesité ordenar una tabla usando una columna que contenía valores NULL, pero además de ellos necesité que si existía un valor nulo, éste tendría que ir al final (y no al principio como noté que sucedía). En otros motores de base de datos, ésto no suele ser un problema, pero vaya que lo es en MySQL (no estoy seguro si en MariaDB se presenta también, pero asumo que sí).
La situación es esta:
MySQL considera a los valores NULL menor que los enteros a menos que la columna esté con signo negativo (Característica no documentada)
Sí señor, así como suena, no está documentado cómo solucionar este problema, aunque sí está la nota que dice que: Los valores NULL en un order by ascendente aparecerán primero.
Por lo anterior me puse a la tarea de encontrar una forma (que no incluyera una subconsulta por cuestiones de rendimiento) para resolver este problema.
La solución la encontré en esta página, pero con el ejemplo en lenguaje Ruby:
Anteponemos el símbolo menos (-) a la columna con los campos nulos en la sección ORDER BY de la consulta e indicamos el sentido contrario del ordenamiento (ASC en lugar de DESC y viceversa)… He aquí un ejemplo para organizar ascendentemente a “campo1″ de la tabla “ejemplo”

SELECT *
FROM ejemplo
ORDER BY -campo DESC

Espero que les sea de ayuda.