Publicado el Dejar un comentario

MySQL: Incorrect key file for table xxxxx.MYI

Incorrect key file for table xxxxxx.MYI;try repai it.

El mensaje anterior se lo envió a un cliente al tratar de hacer un update a un campo de una tabla. Según el cliente eso le pasó después de un corte inesperado de energía eléctrica. Al parecer la tabla sufrió un daño y es necesario repararla.

Para reparar desde mysql ejecutamos la siguiente sentencia:

mysql> repair table <nombre_tabla> USE_FRM;

Donde <nombre_tabla> es el nombre de la tabla que está generando el error que coincide con el nombre del archivo llave .MYI.

Dependiendo de la cantidad de filas o registros que tiene la tabla a reparar la sentencia puede tardar un buen tiempo. La sentencia al terminar regresará dos filas indicando que la reparación fue exitosa.

Es recomendable siempre hacer respaldos diarios de la base de datos para recuperar la tabla en caso de que la sentencia no pueda reparar la tabla y poder recuperar la información desde los respaldos.

¡Saludos!

Publicado el 3 comentarios

SQL: Obtener último(s) caracteres de un campo texto.

Hola, en nuestro quehacer diario con bases de datos relacionales nos topamos a veces con que hay que extraer el o los últimos caracteres de un campo de tipo texto o string de una tabla. Según la base de datos usada la instrucción puede variar.

Enseguida veremos algunos ejemplos, en las distintas bases de datos, donde extraeremos los útimos 2 caracteres del texto constante “texto ejemplo”:

SQLite:

SELECT SUBSTR(‘texto ejemplo’, -2);

Postgresql:

SELECT SUBSTRING(‘texto ejemplo’ from ‘.{2}$’);

SELECT RIGHT(‘texto ejemplo’,2);

MySQL o MariaDB:

SELECT SUBSTRING(‘texto ejemplo’,-2);

SELECT RIGHT(‘texto ejemplo’,2);

SQL Server:

SELECT RIGHT(‘texto ejemplo’, 2);

ORACLE:

SELECT SUBSTR(‘texto ejemplo’, -2) FROM dual;

Todas las sentencias sql descritas anteriormente ejecutadas en la respectiva base de datos regresarán la cadena de caractares ‘lo’.

Dependiendo del número de caracteres a la derecha que queramos obtener sólo tendremos que cambiar el número dos por el número de caracteres deseado en cada una de las sentencias anteriores.

Espero y les séa de utilidad este artículo. Agradezco sus comentarios. ¡Saludos!

Publicado el Dejar un comentario

Listar tablas desde SQL en Oracle, Postgresql y MySQL

Una vez conectados a la base de datos desde un cliente SQL, para listar las tablas a las que tenemos acceso en Oracle sería:

SELECT table_name FROM user_tables;

En Postgresql:

SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';

En la sentencia anterior sustituimos ‘public‘ por el nombre del esquema correspondiente si se tiene más esquemas en la base de datos.

En MySQL:

SELECT table_name FROM information_schema.tables WHERE table_schema = 'nombre_base_de_datos';

Donde nombre_base_de_datos se sustituye por el nombre de la base de datos a la que estamos conectados.

¡Saludos!