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);
dondeTIPO1
yTIPO2
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ÃaCREATE 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 conAND
yOR
. - 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 opcionesASC
yDESC
. De esta forma nuestra búsqueda podÃa ser algo comoSELECT * 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 enSELECT * 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
utilizaremosUPDATE [tabla] SET [columna] = '[nuevo-valor]' WHERE [columna] LIKE '%casa%';
. - Mientras que para actualizar todos los elementos que empiecen por la palabra
casa
utilizaremosUPDATE [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
utilizaremosUPDATE [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…
Un diez para este artÃculo, está muy bien desarrollado y me ha venido muy bien para darle un repaso a las bases de datos. Como siempre, la calidad está presente en toda la página. Muchas gracias por compartir tus conocimientos. Hace algunos meses estuve probando a instalar mariaDb junto con un servidor diferente del omnipresente apache y fue muy instructivo. Gracias maestro.