Desde la línea de comando ciertamente tenemos el control absoluto (siempre y cuando tengamos los privilegios) pero no siempre tenemos una visión general. En este caso cuando estamos logueados a una base de datos MySQL lo primero que solemos intentar averiguar es la lista de tablas y talvez la lista de funciones y procedimientos almacenados de una base de datos.
Este proceso suele ser doloroso por que en cuanto ejecutamos show table status;
nos devuelve unas lineas que hasta da pereza interpretar. Lo que devuelve ese comando contiene varias columnas que vistas desde una herramienta visual como MySQL Workbench tienen mucho sentido, sin embargo desde la linea de comando no tanto. Pueden ver en la siguiente imagen como se ve un resultado en una ventana estándar de 80×25:
Para ver el detalle completo podemos agrandar la ventana y disminuir la fuente, pero suele tomar un poco de tiempo hacer eso, realmente es fastidioso.
Es por eso que hace mucho desarrollé un script para mostrar solo lo que necesito incluyendo a los procedimientos almacenados y funciones, recién esta semana que tengo varias horas de ocio y puedo compartirla con ustedes.
El resultado de mi script es mucho mas comprensible:
Éste es código fuente del procedimiento almacenado:
DELIMITER $$
CREATE PROCEDURE `tools`.`sp_status`(dbname varchar(50))
BEGIN
-- Obteniendo informacion de las tablas
SELECT
TABLE_NAME as `Table Name`,
ENGINE as `Engine`,
TABLE_ROWS as `Rows`,
CONCAT(
(FORMAT((DATA_LENGTH + INDEX_LENGTH) / POWER(1024,2),2))
, ' Mb')
as `Size`,
TABLE_COLLATION as `Collation`
FROM information_schema.TABLES
WHERE TABLES.TABLE_SCHEMA = dbname;
-- Obteniendo las funciones y procedimientos
SELECT ROUTINE_NAME as `Routine Name`,
ROUTINE_TYPE as `Type`,
DATABASE_COLLATION as `Collation`
FROM information_schema.ROUTINES
WHERE ROUTINE_SCHEMA = dbname
ORDER BY ROUTINES.ROUTINE_TYPE, ROUTINES.ROUTINE_NAME;
END$$
Para invocarlo pueden escribir:
mysql> call tools.sp_status(database());
Notarán que he creado el procedimiento dentro de la base de datos tools, esto para que puedan llamarlo desde cualquier parte. Lamentablemente dentro de los procedimientos almacenados no es posible determinar la base de datos actual, es por eso que necesita de un parámetro con el nombre de la base de datos.
He publicado el procedimento en MySQL custom show table status
Espero que les sea de mucha utilidad (como a mi).
`
Quizá con show table status\G te resulta más cómodo que tener que definir procedures
Jordi,
show table status\G no es tan práctico cuando tienes decenas de tablas, ademas el procedure se define una sola vez, me parece mas incomodo estar revisando el resultado de tabulado de 80 tablas con \G.
Gracias Iván. Muy práctico.