Martes, Septiembre 18, 2018

Trabajar con MariaDB desde el terminal

mariadb-desde-el-terminal

No es necesario que lo mencione, pero es evidente, que para trabajar con una base de datos necesitas conectarte con ella. Hasta la fecha, siempre me he conectado a las bases de datos, con las que trabajo, mediante una aplicación con interfaz gráfica. Sin embargo, conforme mas tiempo trabajo en el terminal, más cómodo me siento en él. Esto me lleva a buscar soluciones para hacer cualquier cosa desde el terminal. Y por cualquier cosa, es cualquier cosa que te puedas imaginar. Así, desde hace un tiempo, llevo en mente comenzar a trabajar con MariaDB desde el terminal. Así que ¿como trabajar con MariaDB desde el terminal?

He elegido MariaDB, porque actualmente es la base de datos que mas estoy utilizando. Sin embargo, entiendo que esto se podría hacer de forma extensiva a otros bases de datos. Al final, estamos trabajando con SQL, aunque, cada servidor de bases de datos tiene sus particularidades.

Al final, como verás en este artículo, vas a encontrar una recopilación extensa de muchos de las operaciones mas habituales con SQL. Te recomiendo que le des un vistazo. Es mas, te recomiendo que lo guardes en favorito, para su consulta en favoritos.

¿Por que trabajar con MariaDB desde el terminal?

La verdad, es que la comodidad que te ofrece trabajar desde una aplicación con interfaz gráfica, seguramente, no lo vayas encontrar trabajando desde el terminal. Sin embargo, muchas de las operaciones que realizas en la propia aplicación, son consultas simples. Estas consultas, te da lo mismo hacerlas, desde una ventana gráfica, o desde el terminal, ¿que importa?. Y entonces, ¿que nos aporta el terminal? Sin lugar a dudas, la ventaja que le veo a la conexión desde el terminal, es la rapidez, simplicidad y ligereza.

No te quiero engañar, actualmente no tengo mucha habilidad gestionando MariaDB desde el terminal. Sin embargo, le veo mucho potencial, y así he pensado interesante, recoger en un artículo, las operaciones más básicas. De esta manera, aquí encontrarás las operaciones básicas que tienes que realizar y otras no tanto.

Gestión de bases de datos de MariaDB desde el terminal

Antes de comenzar con una base de datos en particular, necesitamos conectarnos al servidor. Igualmente, necesitamos conocer que bases de datos tenemos disponibles y por supuesto conectarnos a la base de datos. Todo esto lo podemos hacer con MariaDB desde el terminal.

  • Conectarnos al servidor: mariadb -u [usuario] -p; (esto nos preguntará la contraseña de nuestro usuario)
  • Conectarnos directamente a una base de datos: mariadb -u [usuario] -p [base-de-datos] (igual, que en el caso anterior,esto nos preguntará la contraseña de nuestro usuario)
  • Para salir utilizaremos exit.

Una vez conectados, también podemos querer hacer una copia de seguridad de una de nuestras bases de datos en MariaDB desde el terminal.

  • Para hacer una copia de seguridad de una de nuestra bases de datos en MariaDB desde el terminal, mysqldump -u [usuario] -p [base-de-datos] > db_backup.sql.

Una vez conectado al servidor, podemos hacer otras operaciones, como:

  • Para ver todas las bases de datos en MariaDB desde el terminal disponibles: SHOW DATABASES;
  • Crear una nueva base de datos: CREATE DATABASE [base-de-datos];
  • Si lo que quieres es borrar una base de datos: DROP DATABASE [base-de-datos];
  • Para conectarnos a una base de datos: USE [base-de-datos];
  • Para saber que base de datos estamos utilizando: SELECT database();

Gestionando tablas

Una vez conectado al servidor, y elegida la base de datos con la que vamos a trabajar, llega el momento. Ahora vamos a ver las diferentes operaciones que podemos realizar con nuestra base de datos.

  • Ver todas las tablas de nuestra base de datos: SHOW TABLES;
  • Para ver la estructura de una base de datos: DESCRIBE [tabla]
  • Para ver todos los índices de una tabla: SHOW INDEX FROM [tabla]
  • Si queremos crear una tabla, la cosa se complica ligeramente, como ya te podías imaginar. En general, sería algo como CREATE TABLE [tabla] ([columna1] TIPO1, [columna2] TIPO2); donde TIPO1 y TIPO2 son tipos de datos.
  • Para hacer lo mismo que en el caso anterior, pero a partir de una tabla existente, la operación sería algo como CREATE TABLE [tabla] AS SELECT * FROM [tabla-original];. Esto nos crear una nueva tabla igual que la original y además importa los datos. Si no queremos importar los datos, sería CREATE TABLE [tabla] LIKE [tabla-original];.
  • También es posible eliminar una base de datos. Para ello, DROP TABLE [tabla];
  • Otra interesante operación es la de renombrar una tabla ALTER TABLE [tabla] RENAME TO [nuevo-nombre-de-tabla];

Tanto para crear como para eliminar tablas podemos utilizar los condicionales IF NOT EXISTS y IF EXISTS, respectivamente. Así para crear una tabla sería CREATE TABLE IF NOT EXISTS [tabla] ([columna1] TIPO1, [columna2] TIPO2);. Mientras que para borrar la tabla sería DROP TABLE IF EXISTS [tabla];.

Una vez creada la tabla, el siguiente paso sería modificar la estructura de la tabla. ¿A que me refiero con modificar la estructura? Simplemente, a cambiar los campos de la tabla. Así podemos realizar operaciones como añadir o quitar columnas.

  • Si queremos añadir una columna a nuestra tabla ALTER TABLE [tabla] ADD COLUMN [columna] TIPO;
  • Por otro lado, si lo que queremos es cambiar la definición de la columna ALTER TABLE [tabla] CHANGE COLUMN [antiguo-nombre] [nuevo nombre] TIPO1;. Ten en cuenta que si lo único que quieres hacer es cambiar el tipo tendrás que repetir el nombre de la columna, es decir, ALTER TABLE [tabla] CHANGE COLUMN [nombre-columna] [nombre-columna] TIPO1;
  • Para borrar una columna ALTER TABLE [tabla] DROP COLUMN [columna];

Igual que en el caso de las tablas, también podemos utilizar los condicionales IF EXISTS y IF NOT EXISTS.

También podemos realizar operaciones con índices,

  • Si lo que queremos hacer es crear una clave primaria ALTER TABLE [tabla] ADD CONSTRAINT PRIMARY KEY [columna]
  • Si además queremos que la clave primaria, además tiene que ser auto incremental y no nula, la operación sería ALTER TABLE [tabla] ADD COLUMN [column] int NOT NULL AUTO_INCREMENT PRIMARY KEY;
  • Si queremos que un campo sea único ALTER TABLE [tabla] ADD UNIQUE INDEX ([column]);
  • Mientras que si queremos quitar esa restricción ALTER TABLE [tabla] DROP INDEX [columns];

Trabajando con nuestra tabla

Una vez ya hemos creado tanto base de datos como tabla, solo nos queda trabajar con nuestra tabla. Y ¿que podemos hacer con nuestra tabla? Pues lo mas sencillo, añadir elementos, eliminar elementos, actualizar elementos y consultar el contenido. Antes de empezar a realizar otras operaciones, tenemos que introducir contenido en la tabla.

Insertar elementos en la tabla

  • Para un insertar un elemento en la tabla INSERT INTO [tabla] ([columna1], [columna2]) VALUES ('[valor1]', [valor2]');

Consultar nuestra tabla

Ahora ya podemos consultar el contenido de la tabla.

  • Para ver todas los elementos de la tabla SELECT * FROM [tabla];
  • Si solo queremos ver una de las columnas de la tabla SELECT [columna] FROM [tabla];
  • En el caso de queramos solo los elementos que cumplan con un determinado criterio SELECT * FROM [tabla] WHERE [columna]='[valor]';
  • Para ver la cantidad de elementos que tenemos en nuestra tabla SELECT COUNT(*) FROM [tabla];
  • Para obtener el mayor valor de una columna SELECT MAX([columna]) FROM [tabla];.
  • Si lo que queremos es el menor valor SELECT MIN([columna]) FROM [tabla];.
  • O si lo que queremos es el valor medio SELECT AVG([columna]) FROM [tabla];
  • Si queremos el vamor medio redondeado a la primera cifra SELECT ROUND(AVG([columna]), 1);.
  • Sino queremos todos los elementos de nuestra tabla, sino que lo quieres es algunos elementos que cumplan una determinada condición la consulta será algo así como SELECT * FROM [tabla] WHERE [columna] = [valor];. También puedes utilizar otros selectores como <, >, !=, etc, y además combinar con ANDy OR.
  • Puedes personalizar mas la búsqueda utilizando otro tipo de selectores como LIKE combinado con %. Así para buscar algo que contenga las letras casa, será [columna] LIKE '%casa%';. Si queremos que empiece por casa, será [columna] LIKE 'casa%';.
  • Otro interesante operador es BETWEEN, que nos permite hacer búsquedas de rango. Por ejemplo, SELECT * FROM [tabla] WHERE [columna] BETWEEN [valor1] y [valor2];.

En el resultado de la consulta podemos modificar el nombre de los campos o columnas. Esto para una consulta normal, no tiene mucho sentido, pero sin embargo, cuando hacemos consultas de varias tablas a la vez, la cosa empieza a tener su sentido. Así, para hacer esto, la consulta sería algo como SELECT [columna] AS [nombre-de-columna] FROM [tabla];

En el caso de querer hacer una consulta compuesta entre dos tablas SELECT * FROM [tabla1] INNER JOIN [tabla2] ON [tabla1.columna1] = [tabla2.columna2];. Esto nos obtiene aquellos valores que cumplen esa condiciones. Existen dos clausulas adicionales LEFT JOIN y RIGHT JOIN que nos permiten, obtener todos los valores de la columna de la izquierda y solo los que cumplan de la derecha, y al revés.

Por último, y no menos importante, es poder ordenar los resultados.

  • Así tenemos las elementos ORDER BY y las opciones ASC y DESC. De esta forma nuestra búsqueda podía ser algo como SELECT * FROM [tabla] WHERE [columna] = '[valor]' ORDER BY [columna2] ASC;
  • Otra opción que tenemos es limitar el número de resultados de nuestra consulta. Así, si solo queremos obtener los n primeros, la consulta anterior, se convertiría en SELECT * FROM [tabla] WHERE [columna] = '[valor]' ORDER BY [columna2] ASC LIMIT n;

Actualizar los datos de nuestra tabla

Además, seguro que con el paso del tiempo, querremos actualizar algunos de los datos de nuestra tabla.

  • Para actualizar los datos que cumplan una determinada condición utilizaremos UPDATE [tabla] SET [columna] = '[nuevo-valor]' WHERE [columna] = '[valor]';.

Igual que hemos visto con los condiciones para realizar las consultas, también podemos hacer para actualizar,

  • Para actualizar todos los elementos que contengan la palabra casa utilizaremos UPDATE [tabla] SET [columna] = '[nuevo-valor]' WHERE [columna] LIKE '%casa%';.
  • Mientras que para actualizar todos los elementos que empiecen por la palabra casa utilizaremos UPDATE [tabla] SET [columna] = '[nuevo-valor]' WHERE [columna] LIKE 'casa%';.
  • Y si lo que queremos es actualizar todos los elementos que terminen por la palabra casa utilizaremos UPDATE [tabla] SET [columna] = '[nuevo-valor]' WHERE [columna] LIKE '%casa';.

Borrando datos

La última de las acciones que nos queda por hacer con nuestra tabla es la de borrar elementos de la misma.

  • Borrar elementos de la tabla DELETE FROM [tabla] WHERE [columna] = [valor];
  • Si lo que queremos hacer es borrar todos los elementos de la tabla, TRUCANTE TABLE [tabla];.

Algunos ejemplos

Para crear una sencilla tabla con los datos de nuestros usuarios. En esta tabla, además de los datos típicos, he añadido la opción de que cada usuario pueda tener un rol.

CREATE TABLE IF NOT EXISTS usuarios (
    id BIGINT NOT NULL AUTO_INCREMENT,
    id_role BIGINT NOT NULL,
    nombre VARCHAR(256) NOT NULL,
    apellido1 VARCHAR(256) NOT NULL,
    nif VARCHAR (9) NOT NULL,
    PRIMARY KEY(id),
    UNIQUE(nif),
    CONSTRAINT usuarios_fk FOREIGN KEY (id_role) REFERENCES roles (id) ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE IF NOT EXISTS roles (
    id BIGINT NOT NULL AUTO_INCREMENT,
    nombre VARCHAR(256) NOT NULL,
    PRIMARY KEY(id),
    UNIQUE(nombre)
);

INSERT INTO roles (id, nombre) VALUES (1, 'usuario');
INSERT INTO roles (id, nombre) VALUES (2, 'administrador');

INSERT INTO usuarios (id_role, nombre, apellido1, nif) VALUES (1, 'José', 'García', '12345678A');
INSERT INTO usuarios (id_role, nombre, apellido1, nif) VALUES (1, 'Otilio', 'Martínez', '23456789B');
INSERT INTO usuarios (id_role, nombre, apellido1, nif) VALUES (2, 'Mortadelo', 'Fernández', '34567890C');
INSERT INTO usuarios (id_role, nombre, apellido1, nif) VALUES (2, 'Filemón', 'Gutiérrez', '45678901D');

Si queremos realizar una consulta sencilla de los usuarios que tienen el rol de administrador,

SELECT * FROM usuarios WHERE id_role = 2;

Aunque esta consulta es bastante mejor,

SELECT * FROM usuarios INNER JOIN roles ON usuarios.id_role = roles.id WHERE roles.nombre = 'administrador' ORDER BY usuarios.apellido1 ASC;

Conclusión

Empecé escribiendo el artículo, pensando en algo resumido, y finalmente se ha convertido en todo un recetario de cocina, para tenerlo siempre a mano.

Yo no suelo aprender las cosas de memoria, salvo las que me entran de tanto repetirlas. Aunque tiene el problema, de que transcurrido un tiempo se me olvidan. De ahí, que siempre viene bien tener a mano una recopilación de las instrucciones SQL para trabajar con MariaDB desde el terminal.

Como ves, el potencial de trabajar con el terminal es espectacular. Trabajas de forma rápida y sencilla, y sobre todo sin distracciones. El inconveniente, es que no puedes guardar las consultas para utilizarlas posteriormente. Esto si que lo puedes hacer desde un gestor de bases de datos con interfaz gráfica. Aunque, siempre podrías guardarlas en un archivo de texto, o incluso como vista, en la propia base de datos…

 

Fuente: atareao

¿Quién está en línea?

Hay 150 invitados y ningún miembro en línea

Contador de Visitas

9356788
Hoy Hoy 975
Ayer Ayer 1443
Esta semana Esta semana 2418
Este mes Este mes 28056
Total de Visitas Total de Visitas 9356788

Día con más
visitantes

09-13-2018 : 2017

Gracias por su visita