Archivo de la categoría: MySQL

Caracteres de escape en MySQL – MySQL tips

Para los castellano parlantes quiza esta entrada no sea de mucha utilidad, pero si nos encontramos en el caso de tener que desarrollar una web por ejemplo en ingles quiza sirva de utilidad. El caso es el siguiente: i agi emos que tenemos que insertar textos en ingles dentro en nuestra base de datos, y nos encontramos que tenemos que insertar por ejemplo la palabra don’t . Como norma general para escribir una cadena de texto en una sentencia MySQL la encerramos entre comillas simples (‘), asi que si queremos utilizar una cadena de texto que contenga esa comilla, o cualquier otro caracter especial que queramos que sea interpretado como tal, tendremos que utilizar el caracter de escape \. Nuestra consulta quedara de la siguiente manera

Insert into table Set field ='don\'t'

Publicado desde WordPress

Error en el acceso a nuestro sitio Drupal – Drupal Tips

Dentro de los sitiós que mantengo, tengo uno que me da mas de un dolor de cabeza, este fue desarrollado en su dia con Drupal,  y un buen dia paso a mis manos para su mantenimiento, y no voy a decir mas que cada dos por tres me sorprende con alguna.  Una de las que me hace de vez en cuando es no dejar acceder a los usuarios registrados. El usuario intenta acceder con su usuario y contraseña y sin ningun tipo de mensaje vuelve a la misma pantalla.

Una de las cosas que tenemos que hacer en este caso es acceder al registro de errores (error.log) y visualizar a ver que esta pasando. Si el registro tiene unas linea como esta:


<code>Table './dbname/sessions' is marked as crashed and should be repaired</code>

La solución es simple, siempre y cuando tengamos acceso claro.

Accederemos via phpmyadmin a nuestra base de datos y en el listado de estructura marcaremos la tabla `sessions` y a continuación seleccionaremos la opcion repair table o reparar tabla.

Una vez realizado esto ya podremos acceder normalmente a nuestro sitio Drupal.

Mas información acerca de este error https://drupal.org/node/833762

Selección de datos entre fechas – MySQL Tips

MySQLUna de las consultas mas frecuentes que solemos realizar es la de devolver datos entre fechas. La manera mas sencilla de realizar es utilizar el operador de comparación ‘BETWEEN’. Por ejemplo si queremos ver los datos entre dos fechas lo haremos de la siguiente manera. En este ejemplo la fecha mas baja es ‘fechaMin’ y la alta ‘fechaMax’, y hay que tener en cuenta que todos los argumentos tienen que ser del mismo tipo.


SELECT * FROM `miTabla` WHERE `miCampoFecha` BETWEEN 'fechaMin'  AND 'fechaMax';

Si el valor de `micampoFecha` es mayor o igual que ‘fechaMin’ y menor o igual que ‘fechaMax’  ‘BETWEEN’ devolvera 1 si no devolvera 0. Esto es lo mismo que hacer lo siguiente.


SELECT * FROM `miTabla` WHERE ('fechaMin' <= `miCampoFecha` AND `miCampoFecha` <= 'fechaMax')

Si lo que queremos es mostrar las fechas que no esten comprendidas dentro de este rango añadiremos ‘NOT’  delante de ‘BETWEEN’


SELECT * FROM `miTabla` WHERE `miCampoFecha` NOT BETWEEN 'fechaMin'  AND 'fechaMax';

Para mas información acerca de los operadores de comparación en MySQL hacer clic aquí

Calcular la edad con MySQL – MySQL Tips

Muchas veces este tipo de calculos recurrimos ha hacerlos por medio de alguna función, y no nos paramos a pensar que podemos realizarlo en la misma consulta y ahorrar asi tiempo, creación de funciones y llamadas a estas. Con la siguiente consulta, tenemos un campo llamado birthDay el cual almacena la fecha de nacimiento dentro de nuestra tabla myTable y la consulta nos devuelve las edades a dia de hoy.

SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthDay)), '%Y')+0 AS age FROM myTable
Enhanced by Zemanta

Recuperar site offline Drupal

Si por algún motivo se nos queda nuestro sitio de Drupal en modo offline, y no podemos acceder para recuperar el estado normal, ejecutando la siguiente consulta SQL conseguiremos que nuestro sitio vuelva a estar disponible.

 

UPDATE variable SET value = 's:1:"0";' WHERE name= 'site_offline';
DELETE FROM cache WHERE cid = 'variables';

 

LOAD DATA INFILE desde un terminal remoto – MySQL Tips

Siguiendo con las entradas relacionadas con mis notas mentales, hoy me he vuelto a cruzar con una situación que se me plantea de vez en cuando y siempre tengo que tirar de la documentación.

El escenario es el siguiente, tengo un programa en php que se ejecuta en terminal que me realiza una consulta e extracción de datos de una base de datos paradox que esta en un servidor, si he dicho paradox, y me genera un fichero csv el cual a continuación por medio de una consulta de load data infile se me vuelca a una base de datos mysql que tengo en otro servidor. Resulta que la consulta load data infile no he conseguido que se me ejecute, en cuando lo solucione publicare la solución así que lo que hago es una vez terminado el proceso de volcado me conecto al servidor vía terminal y ejecuto la consulta load data infile desde la terminal. Si esto lo hago de esta manera y no ejecutando la consulta directamente es debido a lo lento que funciona el paradox. El proceso de volcado de los datos de paradox al fichero oscila entre los 8-10 minutos, realizando la operación directa el proceso duraba entre 45 minutos a 1 hora.

Primero me conecto al servidor remoto mysql con un usuario y contraseña que tenga permisos para acceso remoto, añadiendo al final la opción –local-infile=1 para poder subir ficheros


#mysql -u [usuario] -p -h [host remoto] --local-infile=1

A continuación ejecuto la consulta para que me vuelque el fichero


LOAD DATA LOCAL INFILE [fichero] REPLACE INTO TABLE [db.table]     CHARACTER SET [tipo caracteres]    FIELDS TERMINATED BY  [terminación campos]     ([columna1], [columna2], ..);

En [fichero] ponemos entre comillas la ruta completa del fichero en nuestro ordenador,  en [db.table] el nombre de la base de datos y la tabla en la que vamos a volcar los datos, en tipo carácter ponemos entre comillas el tipo de codificación p.e cp1250, utf8, en [terminación campos] como están delimitados los campos, p.e ; y finalmente entre paréntesis las columnas del la tabla.

Una vez ejecutado puedo decir que en mi caso se volcaron 42673 registros en 0.53 segundos, esta misma operación la he realizado generando un fichero sql para la inserción de los datos y el tiempo era infinitamente superior a este.

 

Crear una clave foranea con MySQL – Notas Mentales – MySQL Tips

MySQLCon esta entrada voy a inaugurar una serie de minientradas que iré creando, que voy a llamar notas mentales, serán cosas muy cortas y que si no las usamos con frecuencia, siempre que tenemos que tirar de ellas nos toca googlear.

La primera es la consulta para crear una clave foránea en MySQL en una tabla ya creada

 

ALTER TABLE `miTabla` ADD FOREIGN KEY (campodemiTabla) REFERENCES `otraTabla` (`Id`) ;