Posts Tagged ‘mysql’

2 24
08
2012

Conectando MySQL remoto a través de tunel SSH

Viernes, agosto 24th, 2012

Seguramente te habrás encontrado en multitud de ocasiones ante la siguiente situación:

– tienes alojado en un servidor remoto la base de datos MySQL
– el puerto 3306 de MySQL está cerrado para acceder de forma remota
– quieres usar algún cliente, tipo MySQL Query Browser / MySQL Workbench

Lógicamente, al estar el puerto de escucha de MySQL 3306 de forma remota, no podremos acceder bajo un cliente local desde fuera.

Una posible solución para manejar nuestra base de datos, podría ser instalar un aplicativo web como phpmyadmin; o conectarnos por ssh y trabajar bajo línea de comandos sobre MySQL.

Sin embargo, si por comodidad, o por cabezonería, queremos trabajar de forma local conectados a la base de datos externa, utilizando algún tipo de cliente MySQL como los mencionados como MySQL Workbench / MySQL Query Browser, tenemos otra posibilidad, más elegante incluso, que pasa por crear un tunel SSH para acceder a tu servidor de MySQL de manera remota.

Si te encuentras bajo un entorno linux, puedes usar su propio terminal al que ya te encontrarás habituado.

Si por el contrario trabajas bajo sistemas Windows, siempre puedes utilizar algún cliente ssh como PuTTY.

Para ello conectaremos desde el terminal de la siguiente manera:


ssh -N -L 3307:127.0.0.1:3306 userName@remoteHost

para a continuación introducir lógicamente el password para el usuario correspondiente.

Una vez conectado el tunel ssh, es momento de abrir nuestro cliente de MySQL y conectarnos a la base de datos como si en nuestro equipo se encontrara, indicando la ip localhost 127.0.0.1, pero intercambiando el puerto por defecto de MySQL 3306 por el puerto que hayamos indicado en la conexión, en este caso el puerto número 3307.

Conexión MySQL a través de tunel SSH

Conexión MySQL a través de tunel SSH

0 03
11
2010

Registros aleatorios en MySQL

Miércoles, noviembre 3rd, 2010
En ocasiones necesitaremos en nuestras aplicaciones obtener un listado de registros aleatorios de la Base de Datos.
Esta opción puede ser útil por ejemplo, a la hora, de tener en nuestro blog una sección de posts o entradas aleatorias.

Para ello, podemos hacer uso de la ordenación aleatoria de MySQL: ORDER BY RAND()

SELECT * FROM wp_posts <strong>ORDER BY RAND()</strong>;

Si además combinamos ORDER BY RAND con LIMIT, podremos limitar el número de resultados aleatorios dentro del conjunto total de registros:

SELECT * FROM wp_posts <strong>ORDER BY RAND()</strong> LIMIT 10;

IMPORTANTE: ¡Ojo!, ten en cuenta que esta opción es factible siempre y cuando la tabla de la que obtendremos los registros no sea muy grande, con la idea de que no afecte de forma negativa al rendimiento de tu base de datos.

4 05
10
2010

Letra Capital Con SQL

Martes, octubre 5th, 2010

Cuando hablamos de letra capital, estamos hablando del estilo de texto en el que la primera letra de cada palabra aparece en mayúscula, y el resto de la palabra, en minúscula.

Es Decir, Algo Como Esta Frase Que Estás Leyendo Ahora Mismo, O Como El Título De Este Post.

Esto puede ser útil por ejemplo para formatear nombres propios de personas, o por ejemplo, nombres de ciudades: Gran Canaria.

En algunos lenguajes de programación,  existen funciones ya predefinidas que te ofrecen esta posibilidad (como por ejemplo ucwords en PHP), pero … ¿y en lenguaje SQL?

En motores de gestión de base de datos como Oracle, contamos con una función predefinida que convierte a mayúsculas el primer caracter de cada palabra de una cadena: InitCap.

Sin embargo, en otros sistemas de gestión de base de datos como MySql o SqlServer, tendremos que “buscarnos la vida“.

A continuación veremos 2 funciones que nos permitirán modificar nuestras cadenas de texto combinando MAYÚSCULAS y minúsculas directamente en nuestras consultas SQL.

La idea es sencilla: recorreremos la cadena de texto letra por letra en búsqueda de espacios en blanco o cualquier otro carácter separador, marcando con ayuda de una bandera o flag, la indicación de que debemos convertir la siguiente letra en mayúscula.

Letra Capital / Mayúscula-Minúscula En MYSQL

DELIMITER $$

DROP FUNCTION IF EXISTS `test`.`UCWORDS` $$
CREATE FUNCTION `test`.`UCWORDS` (input VARCHAR(255)) RETURNS VARCHAR(255)
BEGIN
  -- Declaración de variables
  DECLARE i INT DEFAULT 0;
  DECLARE length INT;
  DECLARE flag TINYINT DEFAULT 1;
  DECLARE output VARCHAR(255) DEFAULT '';

  -- Para evitar sorpresas, pasamos toda la cadena de texto a minúsculas
  SET input = LOWER(input);
  -- Guardamos la longitud de la cadena a recorrer para utilizarla a continuación
  SET length = LENGTH(input);

  -- Recorremos toda la cadena de texto
  WHILE (i <= length) DO
    IF (flag=1) THEN
      -- El flag estaba activado, lo que significa que habíamos encontrado un espacio en blanco y debemos pasar a mayúscula el carácter actual.
      SET output = CONCAT(output, UPPER(MID(input, i, 1)));
      SET flag = 0;
    ELSE
      SET output = CONCAT(output, MID(input, i, 1));
    END IF;
    IF (MID(input, i, 1) IN (' ', ',', ';', '.', ':', '!', '?', '_', '-', '/', '&', '''', '(', ')')) THEN
      -- Hemos encontrado un espacio en blanco, por lo que activamos nuestra bandera para la próxima iteración.
      SET flag = 1;
    END IF;
    SET i = i+1;
  END WHILE;

  RETURN output;

END $$

DELIMITER ;

Letra Capital / Mayúscula-Minúscula En SQLSERVER


-- =============================================
-- Author:		v3rgu1.com
-- Description:	Función que permite capitalizar
--              un String
-- =============================================
ALTER FUNCTION [dbo].[InitCap]
(
	-- Parámetros
	@INPUT AS VARCHAR(4000)
)
RETURNS VARCHAR(4000)
AS
BEGIN
	-- Declaración de variables
	DECLARE @I AS INT
	DECLARE @LENGTH AS INT
	DECLARE @FLAG AS BIT
	DECLARE @OUTPUT AS VARCHAR(4000)

	-- Inicializamos el contador a 0
	SET @I = 0;
	-- Para evitar sorpresas, pasamos toda la cadena de texto a minúsculas
	SET @INPUT = LOWER(@INPUT);
	-- Guardamos la longitud de la cadena a recorrer para utilizarla a continuación
	SET @LENGTH = LEN(@INPUT);
	-- Inicializamos la bandera como activa para capitalizar la primera letra de la cadena
	SET @FLAG = 1;
	SET @OUTPUT = '';

	-- Recorremos toda la cadena de texto
	WHILE (@I <= @LENGTH) BEGIN
		IF (@FLAG = 1) BEGIN
			-- El flag estaba activado, lo que significa que habíamos encontrado un espacio en blanco y debemos pasar a mayúscula el carácter actual.
			SET @OUTPUT = @OUTPUT + UPPER(SUBSTRING(@INPUT, @I, 1));
			SET @FLAG = 0;
		END ELSE BEGIN
			SET @OUTPUT = @OUTPUT + SUBSTRING(@INPUT, @I, 1);
		END
		IF (SUBSTRING(@INPUT, @I, 1) IN (' ', ',', ';', '.', ':', '!', '?', '_', '-', '/', '&', '''', '(', ')')) BEGIN
			-- Hemos encontrado un espacio en blanco o algún caracter separados,
			-- por lo que activamos nuestra bandera para la próxima iteración.
			SET @FLAG = 1;
		END
		SET @I = @I + 1;
	END -- WHILE

	RETURN @OUTPUT
END