Blog de Desarrollo en Swift para Plataformas Apple y Linux

MariaDB – Comandos Básicos

Get real time updates directly on you device, subscribe now.

En este Tutorial MariaDB vamos a aprender nuevos comandos, los más básicos a través de los cuales comenzaremos a interactuar con este sistema de bases de datos. La distinción entre lo básico, medio y avanzado muchas veces puede ser algo relativo y difícil de representar, así que intentaré hacer mi mejor esfuerzo.

En este tutorial vamos a asumir que el lector ya ha leído nuestro artículo sobre la personalización de nuestro entorno de programación en macOS y también está familiarizado con el contenido de nuestra anterior entrega en esta serie donde abordamos la instalación y configuración de MariaDB.

Son realmente necesarios estos comandos?

En mi opinión, sí. Todos conocemos herramientas de pago como Navicat for MariaDB, una aplicación multiplataforma que nos permite conectarnos de manera remota y desde la comodidad de nuestro entorno gráfico, logrando en la mayoría de los casos que seamos mucho más productivos.

Todo esto está muy bien y es un escenario que recomiendo, pero hay ocasiones (muy frecuentes) en ambientes profesionales donde ante situaciones inesperadas tendremos que interactuar directamente con el terminal de MariaDB y en algunos casos bajo bastante presión, momentos donde nuestro dominio de este sistema de bases de datos y sus comandos harán la diferencia.

Iniciar el servidor de MariaDB

Pues antes de comenzar a interactuar con MariaDB a través de la línea de comandos, primero tenemos que iniciar el servicio asociado a este sistema de bases de datos. Luego de haber seguido los pasos que hemos ejecutado en el anterior artículo (nombrado al inicio de este tutorial) no tendríamos que hacer nada ya que este se estaría ejecutando en cada inicio del sistema y esto lo podemos comprobar desde macOS con el comando:

╭─josuevhn@WiseRatel ~
╰─$ mysql.server status
 SUCCESS! MySQL running (10284)

…en la salida en pantalla se nos informa que el demonio (informática) se está ejecutando satisfactoriamente y nos muestra el pid (Process Identification Number) asociado a este. Pero asumiendo que no es así, supongamos que no deseamos que esté corriendo constantemente en el background, pues lo podemos iniciar de esta manera:

Proceso donde detenemos e iniciamos MariaDB para luego verificar que el puerto asociado al servicios se encuentra abierto.

…en esta imagen se pueden observar tres acciones: la primera detiene el servicio, la segunda lo inicia y en la tercera verificamos que el puerto asociado a este servicio (por defecto el 3306) se encuentra en escucha (LISTEN) o lo que sería lo mismo, en espera de peticiones. Todo listo para continuar a la siguiente sección.

Conectarnos a MariaDB desde la terminal de macOS

╭─josuevhn@WiseRatel ~
╰─$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.2.9-MariaDB Homebrew

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

…el parámetro -u nos permite especificar el usuario con el cual nos conectaremos a nuestra base de datos. En un inicio tendrá que ser el usuario root, pero luego ya deberíamos, teniendo en cuenta la seguridad, acceder con un usuario cuyos privilegios sean solamente los necesarios para las tareas a realizar.

Visualizar las bases de datos en nuestro servidor

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

MariaDB [(none)]>

…aquí podemos observar las bases de datos por defecto que crea MariaDB al instalarse, y en nuestro caso, luego de haber ejecutado el script de seguridad, son las necesarias para su funcionamiento.

Crear una base de datos nueva

MariaDB [(none)]> CREATE DATABASE empresa CHARACTER SET utf8 COLLATE utf8_spanish_ci;
Query OK, 1 row affected (0.01 sec)

MariaDB [(none)]>

…en el ejemplo creamos la base de datos «empresa» especificando que el juego de caracteres será «utf8», específicamente la variación «utf8_spanish_ci». Tener en cuenta la variación o collate de nuestro juego de caracteres es sumamente importante y sobre todo fundamental tenerlo en cuenta en la etapa de diseño, créanme que les evitará muchos dolores de cabeza.

La variación «utf8_spanish_ci» hace referencia directa a las reglas que conformarían el llamado «español moderno», el cual contempla la ñ como una letra más del alfabeto, ubicada entre las letras «n» y «o», la «ch» se considera la unión de la letra «c» y «h» al igual que la «ll» que está conformada por la unión de la letra «l».

En mi opinión esta variación es mucho más natural, coherente y lógica que la versión «utf8_spanish2_ci», esta última hace referencia al «español tradicional» y no cuenta con las bondades u optimizaciones de la opción que hemos escogido. Les pregunto: ¿Han visto alguna vez un teclado de ordenador o una máquina de escribir con teclas «ll» o «ch»?

Creación de un usuario con privilegios

MariaDB [(none)]> CREATE USER "josuevhn"@"localhost" IDENTIFIED BY "P@ssw0rd*";
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> use empresa;
Database changed
MariaDB [empresa]> GRANT ALL ON empresa.* TO "josuevhn"@"localhost";
Query OK, 0 rows affected (0.01 sec)

MariaDB [empresa]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.02 sec)

MariaDB [empresa]> SELECT User,Host FROM mysql.user;
+----------+-----------+
| User     | Host      |
+----------+-----------+
| root     | 127.0.0.1 |
| root     | ::1       |
| josuevhn | localhost |
| root     | localhost |
+----------+-----------+
4 rows in set (0.00 sec)

MariaDB [empresa]>

…acabamos de crear el usuario «josuevhn» identificado por «P@ssw0rd*» como contraseña. Evidentemente esta contraseña ha sido establecida en pos de hacer el ejemplo más gráfico, pero en la vida real por favor elija alternativas cuya palabra/s no sean tan evidentes.

Luego de esto hemos seleccionado la base de datos sobre la que deseamos trabajar, en este caso «empresa», y acto seguido le otorgamos todos los permisos al usuario «josuevhn» sobre la misma.

Continuamos ejecutando un «FLUSH» para recargar todos los privilegios y terminamos listando los usuarios y sus respectivos host asociados.

Cómo listar y eliminar los privilegios de un usuario

MariaDB [empresa]> SHOW GRANTS FOR "josuevhn"@"localhost";
+-----------------------------------------------------------------------------------------------------------------+
| Grants for josuevhn@localhost                                                                                   |
+-----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'josuevhn'@'localhost' IDENTIFIED BY PASSWORD '*AD30B1F0F423A0FD49174DDF2AA8E5249F95B801' |
| GRANT ALL PRIVILEGES ON `empresa`.* TO 'josuevhn'@'localhost'                                                   |
+-----------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

MariaDB [empresa]> REVOKE ALL PRIVILEGES ON empresa.* FROM "josuevhn"@"localhost";
Query OK, 0 rows affected (0.00 sec)

MariaDB [empresa]> SHOW GRANTS FOR "josuevhn"@"localhost";
+-----------------------------------------------------------------------------------------------------------------+
| Grants for josuevhn@localhost                                                                                   |
+-----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'josuevhn'@'localhost' IDENTIFIED BY PASSWORD '*AD30B1F0F423A0FD49174DDF2AA8E5249F95B801' |
+-----------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [empresa]>

Crear una tabla y añadirle contenido

MariaDB [empresa]> CREATE TABLE trabajadores
    -> (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> nombre VARCHAR(20) NOT NULL,
    -> cedula INT UNSIGNED NOT NULL UNIQUE,
    -> RUC BIGINT(13) UNSIGNED NOT NULL UNIQUE,
    -> fecha_de_nacimiento DATE NOT NULL,
    -> salario_mensual DECIMAL(7, 2) UNSIGNED NOT NULL);
Query OK, 0 rows affected (0.06 sec)

MariaDB [empresa]> DESCRIBE trabajadores;
+---------------------+-----------------------+------+-----+---------+----------------+
| Field               | Type                  | Null | Key | Default | Extra          |
+---------------------+-----------------------+------+-----+---------+----------------+
| id                  | int(10) unsigned      | NO   | PRI | NULL    | auto_increment |
| nombre              | varchar(20)           | NO   |     | NULL    |                |
| cedula              | int(10) unsigned      | NO   | UNI | NULL    |                |
| RUC                 | bigint(13) unsigned   | NO   | UNI | NULL    |                |
| fecha_de_nacimiento | date                  | NO   |     | NULL    |                |
| salario_mensual     | decimal(7,2) unsigned | NO   |     | NULL    |                |
+---------------------+-----------------------+------+-----+---------+----------------+
6 rows in set (0.01 sec)

MariaDB [empresa]> INSERT INTO trabajadores (id, nombre, cedula, RUC, fecha_de_nacimiento, salario_mensual)
    -> VALUES (NULL, "David", 1753664866, 1753664866001, "1983-01-01", 5316.50);
Query OK, 1 row affected (0.01 sec)

MariaDB [empresa]> SELECT * FROM trabajadores;
+----+--------+------------+---------------+---------------------+-----------------+
| id | nombre | cedula     | RUC           | fecha_de_nacimiento | salario_mensual |
+----+--------+------------+---------------+---------------------+-----------------+
|  1 | David  | 1753664866 | 1753664866001 | 1983-01-01          | 5316.50         |
+----+--------+------------+---------------+---------------------+-----------------+
1 row in set (0.00 sec)

MariaDB [empresa]>

…antes que nada especificamos la base de datos a usar, proseguimos creando la tabla «trabajadores» con las columnas «id, nombre, cedula, RUC, fecha_de_nacimiento, salario_mensual». En la declaración de los campos establecemos los tipos de datos requeridos para estos al igual que los atributos necesarios para lograr ciertos comportamientos específicos.

En nuestro ejemplo hemos usado atributos como UNSIGNED para aquellos datos numéricos donde los valores no contemplarán signos (negativos o positivos) y NOT NULL para todos los campos ya que son requeridos (ninguno de estos puede dejarse en blanco), AUTO_INCREMENT por su parte incrementa automáticamente el valor de esa columna en una unidad por cada fila de la tabla, UNIQUE restringe la columna a que no acepte valores duplicados y por último PRIMARY KEY establece la llave primaria.

En el siguiente comando mostramos una descripción de la tabla donde podemos verificar si se ha creado tal y como queríamos, es decir, cumpliendo nuestros requerimientos.

Continuamos añadiendo una fila / tupla a nuestra tabla «trabajadores». Al campo «id» le asignamos NULL ya que el mismo cuenta con el atributo AUTO_INCREMENT, esto nos permite despreocuparnos de incrementar de manera manual este campo, MariaDB sustituye el valor NULL por valor siguiente en la secuencia del campo «id». Cabe aclarar que los campos con el atributo PRIMARY KEY no pueden contener valores NULL, evidentemente esta es una excepción que MariaDB logra solver al sustituir este valor en tiempo de ejecución.

Terminamos mostrando los datos introducidos usando la orden SELECT que nos permite ejecutar consultas, en este caso todos los datos contenidos en la tabla «trabajadores».

Renombrar tabla

MariaDB [empresa]> show tables;
+-------------------+
| Tables_in_empresa |
+-------------------+
| trabajadores      |
+-------------------+
1 row in set (0.01 sec)

MariaDB [empresa]> RENAME TABLE trabajadores TO workers;
Query OK, 0 rows affected (0.02 sec)

MariaDB [empresa]> show tables;
+-------------------+
| Tables_in_empresa |
+-------------------+
| workers           |
+-------------------+
1 row in set (0.00 sec)

MariaDB [empresa]>

Ordenar los resultados de una consulta

MariaDB [empresa]> select * from trabajadores;
+----+---------+------------+---------------+---------------------+-----------------+
| id | nombre  | cedula     | RUC           | fecha_de_nacimiento | salario_mensual |
+----+---------+------------+---------------+---------------------+-----------------+
|  1 | David   | 1753664866 | 1753664866001 | 1983-01-01          | 5316.50         |
|  2 | Nery    | 1753667366 | 1753667366001 | 1966-09-15          | 7326.00         |
|  3 | Olga    | 1353667345 | 1353667345001 | 1954-01-26          | 4916.00         |
|  4 | Orlando | 1453667238 | 1453667238001 | 1975-07-12          | 8615.00         |
|  5 | Gisel   | 1753687292 | 1753687292001 | 1976-10-28          | 5700.00         |
+----+---------+------------+---------------+---------------------+-----------------+
5 rows in set (0.00 sec)

MariaDB [empresa]> SELECT * FROM trabajadores ORDER BY nombre ASC;
+----+---------+------------+---------------+---------------------+-----------------+
| id | nombre  | cedula     | RUC           | fecha_de_nacimiento | salario_mensual |
+----+---------+------------+---------------+---------------------+-----------------+
|  1 | David   | 1753664866 | 1753664866001 | 1983-01-01          | 5316.50         |
|  5 | Gisel   | 1753687292 | 1753687292001 | 1976-10-28          | 5700.00         |
|  2 | Nery    | 1753667366 | 1753667366001 | 1966-09-15          | 7326.00         |
|  3 | Olga    | 1353667345 | 1353667345001 | 1954-01-26          | 4916.00         |
|  4 | Orlando | 1453667238 | 1453667238001 | 1975-07-12          | 8615.00         |
+----+---------+------------+---------------+---------------------+-----------------+
5 rows in set (0.00 sec)

MariaDB [empresa]> SELECT * FROM trabajadores ORDER BY nombre DESC;
+----+---------+------------+---------------+---------------------+-----------------+
| id | nombre  | cedula     | RUC           | fecha_de_nacimiento | salario_mensual |
+----+---------+------------+---------------+---------------------+-----------------+
|  4 | Orlando | 1453667238 | 1453667238001 | 1975-07-12          | 8615.00         |
|  3 | Olga    | 1353667345 | 1353667345001 | 1954-01-26          | 4916.00         |
|  2 | Nery    | 1753667366 | 1753667366001 | 1966-09-15          | 7326.00         |
|  5 | Gisel   | 1753687292 | 1753687292001 | 1976-10-28          | 5700.00         |
|  1 | David   | 1753664866 | 1753664866001 | 1983-01-01          | 5316.50         |
+----+---------+------------+---------------+---------------------+-----------------+
5 rows in set (0.00 sec)

MariaDB [empresa]> SELECT * FROM trabajadores ORDER BY cedula ASC;
+----+---------+------------+---------------+---------------------+-----------------+
| id | nombre  | cedula     | RUC           | fecha_de_nacimiento | salario_mensual |
+----+---------+------------+---------------+---------------------+-----------------+
|  3 | Olga    | 1353667345 | 1353667345001 | 1954-01-26          | 4916.00         |
|  4 | Orlando | 1453667238 | 1453667238001 | 1975-07-12          | 8615.00         |
|  1 | David   | 1753664866 | 1753664866001 | 1983-01-01          | 5316.50         |
|  2 | Nery    | 1753667366 | 1753667366001 | 1966-09-15          | 7326.00         |
|  5 | Gisel   | 1753687292 | 1753687292001 | 1976-10-28          | 5700.00         |
+----+---------+------------+---------------+---------------------+-----------------+
5 rows in set (0.00 sec)

MariaDB [empresa]> SELECT * FROM trabajadores ORDER BY cedula DESC;
+----+---------+------------+---------------+---------------------+-----------------+
| id | nombre  | cedula     | RUC           | fecha_de_nacimiento | salario_mensual |
+----+---------+------------+---------------+---------------------+-----------------+
|  5 | Gisel   | 1753687292 | 1753687292001 | 1976-10-28          | 5700.00         |
|  2 | Nery    | 1753667366 | 1753667366001 | 1966-09-15          | 7326.00         |
|  1 | David   | 1753664866 | 1753664866001 | 1983-01-01          | 5316.50         |
|  4 | Orlando | 1453667238 | 1453667238001 | 1975-07-12          | 8615.00         |
|  3 | Olga    | 1353667345 | 1353667345001 | 1954-01-26          | 4916.00         |
+----+---------+------------+---------------+---------------------+-----------------+
5 rows in set (0.00 sec)

MariaDB [empresa]> SELECT * FROM trabajadores ORDER BY fecha_de_nacimiento ASC;
+----+---------+------------+---------------+---------------------+-----------------+
| id | nombre  | cedula     | RUC           | fecha_de_nacimiento | salario_mensual |
+----+---------+------------+---------------+---------------------+-----------------+
|  3 | Olga    | 1353667345 | 1353667345001 | 1954-01-26          | 4916.00         |
|  2 | Nery    | 1753667366 | 1753667366001 | 1966-09-15          | 7326.00         |
|  4 | Orlando | 1453667238 | 1453667238001 | 1975-07-12          | 8615.00         |
|  5 | Gisel   | 1753687292 | 1753687292001 | 1976-10-28          | 5700.00         |
|  1 | David   | 1753664866 | 1753664866001 | 1983-01-01          | 5316.50         |
+----+---------+------------+---------------+---------------------+-----------------+
5 rows in set (0.00 sec)

MariaDB [empresa]> SELECT * FROM trabajadores ORDER BY fecha_de_nacimiento DESC;
+----+---------+------------+---------------+---------------------+-----------------+
| id | nombre  | cedula     | RUC           | fecha_de_nacimiento | salario_mensual |
+----+---------+------------+---------------+---------------------+-----------------+
|  1 | David   | 1753664866 | 1753664866001 | 1983-01-01          | 5316.50         |
|  5 | Gisel   | 1753687292 | 1753687292001 | 1976-10-28          | 5700.00         |
|  4 | Orlando | 1453667238 | 1453667238001 | 1975-07-12          | 8615.00         |
|  2 | Nery    | 1753667366 | 1753667366001 | 1966-09-15          | 7326.00         |
|  3 | Olga    | 1353667345 | 1353667345001 | 1954-01-26          | 4916.00         |
+----+---------+------------+---------------+---------------------+-----------------+
5 rows in set (0.00 sec)

MariaDB [empresa]>

…en este ejemplo hemos ordenado columnas de tipo varchar, int y date, de manera ascendente y descendente mediante las ordenes «ASC» y «DESC» respectivamente.

Expresiones regulares

Las expresiones regulares son secuencia de caracteres que forman patrones de búsqueda, que en base a nuestra necesidad, brindan una solución bien flexible.

Patrón Búsqueda
^ Inicio de cadena de texto.
$ Fin de cadena de texto.
. Cualquier caracter.
[…] Cualquier caracter listado dentro de los corchetes.
[^…] Cualquier caracter menos los listado dentro de los corchetes.
p1 | p2 | p3 Alternar cualquiera de los tres patrones.
* Cero o más instancias a partir del elemento.
+ Uno o más instancias a partir del elemento.
{ n }  n instancias a partir del elemento.
 { m, n }  De m hasta n instancias a partir del elemento.

Proseguimos con algunos ejemplos sobre su uso:

MariaDB [empresa]> SELECT * FROM trabajadores;
+----+---------+------------+---------------+---------------------+-----------------+
| id | nombre  | cedula     | RUC           | fecha_de_nacimiento | salario_mensual |
+----+---------+------------+---------------+---------------------+-----------------+
|  1 | David   | 1753664866 | 1753664866001 | 1983-01-01          | 5316.50         |
|  2 | Nery    | 1753667366 | 1753667366001 | 1966-09-15          | 7326.00         |
|  3 | Olga    | 1353667345 | 1353667345001 | 1954-01-26          | 4916.00         |
|  4 | Orlando | 1453667238 | 1453667238001 | 1975-07-12          | 8615.00         |
|  5 | Gisel   | 1753687292 | 1753687292001 | 1976-10-28          | 5700.00         |
+----+---------+------------+---------------+---------------------+-----------------+
5 rows in set (0.00 sec)

MariaDB [empresa]> SELECT * FROM trabajadores WHERE nombre REGEXP "^O";
+----+---------+------------+---------------+---------------------+-----------------+
| id | nombre  | cedula     | RUC           | fecha_de_nacimiento | salario_mensual |
+----+---------+------------+---------------+---------------------+-----------------+
|  3 | Olga    | 1353667345 | 1353667345001 | 1954-01-26          | 4916.00         |
|  4 | Orlando | 1453667238 | 1453667238001 | 1975-07-12          | 8615.00         |
+----+---------+------------+---------------+---------------------+-----------------+
2 rows in set (0.01 sec)

MariaDB [empresa]> SELECT * FROM trabajadores WHERE nombre REGEXP "[aeiou]$";
+----+---------+------------+---------------+---------------------+-----------------+
| id | nombre  | cedula     | RUC           | fecha_de_nacimiento | salario_mensual |
+----+---------+------------+---------------+---------------------+-----------------+
|  3 | Olga    | 1353667345 | 1353667345001 | 1954-01-26          | 4916.00         |
|  4 | Orlando | 1453667238 | 1453667238001 | 1975-07-12          | 8615.00         |
+----+---------+------------+---------------+---------------------+-----------------+
2 rows in set (0.01 sec)

MariaDB [empresa]> SELECT * FROM trabajadores WHERE nombre REGEXP "[yl]$";
+----+--------+------------+---------------+---------------------+-----------------+
| id | nombre | cedula     | RUC           | fecha_de_nacimiento | salario_mensual |
+----+--------+------------+---------------+---------------------+-----------------+
|  2 | Nery   | 1753667366 | 1753667366001 | 1966-09-15          | 7326.00         |
|  5 | Gisel  | 1753687292 | 1753687292001 | 1976-10-28          | 5700.00         |
+----+--------+------------+---------------+---------------------+-----------------+
2 rows in set (0.00 sec)

MariaDB [empresa]> SELECT * FROM trabajadores WHERE cedula REGEXP "^175";
+----+--------+------------+---------------+---------------------+-----------------+
| id | nombre | cedula     | RUC           | fecha_de_nacimiento | salario_mensual |
+----+--------+------------+---------------+---------------------+-----------------+
|  1 | David  | 1753664866 | 1753664866001 | 1983-01-01          | 5316.50         |
|  2 | Nery   | 1753667366 | 1753667366001 | 1966-09-15          | 7326.00         |
|  5 | Gisel  | 1753687292 | 1753687292001 | 1976-10-28          | 5700.00         |
+----+--------+------------+---------------+---------------------+-----------------+
3 rows in set (0.00 sec)

MariaDB [empresa]> SELECT * FROM trabajadores WHERE cedula REGEXP "^175|(66$|5$)";
+----+--------+------------+---------------+---------------------+-----------------+
| id | nombre | cedula     | RUC           | fecha_de_nacimiento | salario_mensual |
+----+--------+------------+---------------+---------------------+-----------------+
|  1 | David  | 1753664866 | 1753664866001 | 1983-01-01          | 5316.50         |
|  2 | Nery   | 1753667366 | 1753667366001 | 1966-09-15          | 7326.00         |
|  3 | Olga   | 1353667345 | 1353667345001 | 1954-01-26          | 4916.00         |
|  5 | Gisel  | 1753687292 | 1753687292001 | 1976-10-28          | 5700.00         |
+----+--------+------------+---------------+---------------------+-----------------+
4 rows in set (0.00 sec)

MariaDB [empresa]>

…en la línea 13 mostramos las filas cuyo texto en la columna «nombre» comienzan con la letra «O», continuamos en la línea 22 mostrando las filas cuyo texto en la columna «nombre» finaliza con una vocal, en la línea 31 filtramos aquellos nombres que terminan en la letra «y» o «l», ejecutamos otra consulta en la linea 40, esta vez sobre una columna de tipo numérico, donde filtramos en la columna «cédula » todas aquellas cédulas que comienzan con los caracteres «175», finalizamos en la línea 50 mostrando todas aquellas cédulas que cumplen el patrón de comenzar con «175» o finalizar con «66» o «5».

Borrar contenido de una tabla sin modificar su estructura

Mediante el comando TRUNCATE podemos conformar una consulta en pos de borrar todos los registros de una tabla sin necesidad de eliminar la tabla o de modificar su estructura. Una consulta tipo sería la siguiente:

MariaDB [empresa]> TRUNCATE TABLE trabajadores;

Eliminar fila de una tabla

En caso de que necesitemos eliminar una fila específica de una tabla, el comando DELETE nos va a ayudar:

MariaDB [empresa]> SELECT * FROM trabajadores;
+----+---------+------------+---------------+---------------------+-----------------+
| id | nombre  | cedula     | RUC           | fecha_de_nacimiento | salario_mensual |
+----+---------+------------+---------------+---------------------+-----------------+
|  1 | David   | 1753664866 | 1753664866001 | 1983-01-01          | 5316.50         |
|  2 | Nery    | 1753667366 | 1753667366001 | 1966-09-15          | 7326.00         |
|  3 | Olga    | 1353667345 | 1353667345001 | 1954-01-26          | 4916.00         |
|  4 | Orlando | 1453667238 | 1453667238001 | 1975-07-12          | 8615.00         |
|  5 | Gisel   | 1753687292 | 1753687292001 | 1976-10-28          | 5700.00         |
+----+---------+------------+---------------+---------------------+-----------------+
5 rows in set (0.00 sec)

MariaDB [empresa]> DELETE FROM trabajadores WHERE id = 1;
Query OK, 1 row affected (0.01 sec)

MariaDB [empresa]> SELECT * FROM trabajadores;
+----+---------+------------+---------------+---------------------+-----------------+
| id | nombre  | cedula     | RUC           | fecha_de_nacimiento | salario_mensual |
+----+---------+------------+---------------+---------------------+-----------------+
|  2 | Nery    | 1753667366 | 1753667366001 | 1966-09-15          | 7326.00         |
|  3 | Olga    | 1353667345 | 1353667345001 | 1954-01-26          | 4916.00         |
|  4 | Orlando | 1453667238 | 1453667238001 | 1975-07-12          | 8615.00         |
|  5 | Gisel   | 1753687292 | 1753687292001 | 1976-10-28          | 5700.00         |
+----+---------+------------+---------------+---------------------+-----------------+
4 rows in set (0.00 sec)

MariaDB [empresa]>

Eliminar columna de una tabla

Mediante el comando ALTER podemos eliminar una columna de una tabla ya creada:

MariaDB [empresa]> SELECT * FROM trabajadores;
+----+---------+------------+---------------+---------------------+-----------------+
| id | nombre  | cedula     | RUC           | fecha_de_nacimiento | salario_mensual |
+----+---------+------------+---------------+---------------------+-----------------+
|  2 | Nery    | 1753667366 | 1753667366001 | 1966-09-15          | 7326.00         |
|  3 | Olga    | 1353667345 | 1353667345001 | 1954-01-26          | 4916.00         |
|  4 | Orlando | 1453667238 | 1453667238001 | 1975-07-12          | 8615.00         |
|  5 | Gisel   | 1753687292 | 1753687292001 | 1976-10-28          | 5700.00         |
+----+---------+------------+---------------+---------------------+-----------------+
4 rows in set (0.00 sec)

MariaDB [empresa]> ALTER TABLE trabajadores DROP ruc;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [empresa]> SELECT * FROM trabajadores;
+----+---------+------------+---------------------+-----------------+
| id | nombre  | cedula     | fecha_de_nacimiento | salario_mensual |
+----+---------+------------+---------------------+-----------------+
|  2 | Nery    | 1753667366 | 1966-09-15          | 7326.00         |
|  3 | Olga    | 1353667345 | 1954-01-26          | 4916.00         |
|  4 | Orlando | 1453667238 | 1975-07-12          | 8615.00         |
|  5 | Gisel   | 1753687292 | 1976-10-28          | 5700.00         |
+----+---------+------------+---------------------+-----------------+
4 rows in set (0.01 sec)

MariaDB [empresa]>

…usando el mismo comando podremos añadir una columna a una tabla ya creada:

MariaDB [empresa]> SELECT * FROM trabajadores;
+----+---------+------------+---------------------+-----------------+
| id | nombre  | cedula     | fecha_de_nacimiento | salario_mensual |
+----+---------+------------+---------------------+-----------------+
|  2 | Nery    | 1753667366 | 1966-09-15          | 7326.00         |
|  3 | Olga    | 1353667345 | 1954-01-26          | 4916.00         |
|  4 | Orlando | 1453667238 | 1975-07-12          | 8615.00         |
|  5 | Gisel   | 1753687292 | 1976-10-28          | 5700.00         |
+----+---------+------------+---------------------+-----------------+
4 rows in set (0.00 sec)

MariaDB [empresa]> ALTER TABLE trabajadores ADD telefono VARCHAR(15) AFTER fecha_de_nacimiento;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [empresa]> SELECT * FROM trabajadores;
+----+---------+------------+---------------------+----------+-----------------+
| id | nombre  | cedula     | fecha_de_nacimiento | telefono | salario_mensual |
+----+---------+------------+---------------------+----------+-----------------+
|  2 | Nery    | 1753667366 | 1966-09-15          | NULL     | 7326.00         |
|  3 | Olga    | 1353667345 | 1954-01-26          | NULL     | 4916.00         |
|  4 | Orlando | 1453667238 | 1975-07-12          | NULL     | 8615.00         |
|  5 | Gisel   | 1753687292 | 1976-10-28          | NULL     | 5700.00         |
+----+---------+------------+---------------------+----------+-----------------+
4 rows in set (0.00 sec)

MariaDB [empresa]>

…ya en este punto solamente habría que insertarle datos a la nueva columna.

Eliminar una tabla

MariaDB [empresa]> DROP TABLE trabajadores;

Eliminar una base de datos

MariaDB [(none)]> DROP DATABASE trabajadores;

Comprobar integridad de una base de datos

╭─josuevhn@WiseRatel ~
╰─$ mysqlcheck -u root -p empresa
Enter password:
empresa.trabajadores                               OK
╭─josuevhn@WiseRatel ~
╰─$

…también podemos comprobar la integridad de todas las bases de datos de nuestro servidor, usando el mismo comando, con la siguiente modificación:

╭─josuevhn@WiseRatel ~
╰─$ mysqlcheck -u root -p --all-databases
Enter password:
empresa.trabajadores                               OK
mysql.column_stats                                 OK
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.event                                        OK
mysql.func                                         OK
mysql.gtid_slave_pos                               OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_relation                                OK
mysql.help_topic                                   OK
mysql.host                                         OK
mysql.index_stats                                  OK
mysql.innodb_index_stats                           OK
mysql.innodb_table_stats                           OK
mysql.plugin                                       OK
mysql.proc                                         OK
mysql.procs_priv                                   OK
mysql.proxies_priv                                 OK
mysql.roles_mapping                                OK
mysql.servers                                      OK
mysql.table_stats                                  OK
mysql.tables_priv                                  OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name                               OK
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
╭─josuevhn@WiseRatel ~
╰─$

Realizar copia de seguridad de una base de datos o de todas

Las copias de seguridad o Backups, las vamos a realizar con el comando mysqldump. Este comando se instala con MariaDB, es parte de esta pero no de su terminal, es decir que se accede a él como un comando cualquiera del sistema. La sintaxis del mismo es la siguiente:

shell> mysqldump [opciones] nombre_base_de_datos [nombre_tabla] ...

shell> mysqldump [opciones] --databases nombre_base_de_datos ...

shell> mysqldump [opciones] --all-databases

…siguiendo estas especificaciones:

╭─josuevhn@WiseRatel ~
╰─$ mysqldump -u root -p empresa > empresa.sql
Enter password:
╭─josuevhn@WiseRatel ~
╰─$ ls -lh
total 8
drwx------@  4 josuevhn  staff   128B Sep 25 23:45 Applications
drwx------@ 15 josuevhn  staff   480B Oct 28 16:32 Desktop
drwx------@ 16 josuevhn  staff   512B Oct 25 21:47 Documents
drwx------+  9 josuevhn  staff   288B Oct 27 13:07 Downloads
drwx------@ 67 josuevhn  staff   2.1K Oct 12 12:53 Library
drwx------+  4 josuevhn  staff   128B Oct 26 16:48 Movies
drwx------+  4 josuevhn  staff   128B Sep 26 12:10 Music
drwx------   6 josuevhn  staff   192B Oct 12 12:55 Parallels
drwx------+  4 josuevhn  staff   128B Sep 25 19:45 Pictures
drwxr-xr-x+  4 josuevhn  staff   128B Sep 25 17:50 Public
-rw-r--r--   1 josuevhn  staff   2.4K Oct 29 01:37 empresa.sql
╭─josuevhn@WiseRatel ~
╰─$

…hemos hecho una copia de seguridad de nuestra base de datos empresa, en la línea 17 podemos observar el fichero que contiene toda la información de nuestra base de datos, este es nuestro backup. Ahora que tal, si necesitamos de todo nuestro servidor, es decir todas las bases de datos?

╭─josuevhn@WiseRatel ~
╰─$ mysqldump -u root -p --all-databases > server.sql
Enter password:
╭─josuevhn@WiseRatel ~
╰─$ ls -lh
total 952
drwx------@  4 josuevhn  staff   128B Sep 25 23:45 Applications
drwx------@ 15 josuevhn  staff   480B Oct 28 16:32 Desktop
drwx------@ 16 josuevhn  staff   512B Oct 25 21:47 Documents
drwx------+  9 josuevhn  staff   288B Oct 27 13:07 Downloads
drwx------@ 67 josuevhn  staff   2.1K Oct 12 12:53 Library
drwx------+  4 josuevhn  staff   128B Oct 26 16:48 Movies
drwx------+  4 josuevhn  staff   128B Sep 26 12:10 Music
drwx------   6 josuevhn  staff   192B Oct 12 12:55 Parallels
drwx------+  4 josuevhn  staff   128B Sep 25 19:45 Pictures
drwxr-xr-x+  4 josuevhn  staff   128B Sep 25 17:50 Public
-rw-r--r--   1 josuevhn  staff   2.4K Oct 29 01:37 empresa.sql
-rw-r--r--   1 josuevhn  staff   468K Oct 29 01:38 server.sql
╭─josuevhn@WiseRatel ~
╰─$

…en la línea 18 tenemos el fichero con todas las bases de datos.

Cuando se tienen grandes bases de datos muchas veces se hace necesario comprimir las copias de seguridad, esto lo podemos lograr con una sencilla modificación al comando usado en el ejemplo anterior:

╭─josuevhn@WiseRatel ~
╰─$ mysqldump -u root -p --all-databases | gzip -9 > server.sql.gz
Enter password:
╭─josuevhn@WiseRatel ~
╰─$ ls -lh
total 1224
drwx------@  4 josuevhn  staff   128B Sep 25 23:45 Applications
drwx------@ 15 josuevhn  staff   480B Oct 28 16:32 Desktop
drwx------@ 16 josuevhn  staff   512B Oct 25 21:47 Documents
drwx------+  9 josuevhn  staff   288B Oct 27 13:07 Downloads
drwx------@ 67 josuevhn  staff   2.1K Oct 12 12:53 Library
drwx------+  4 josuevhn  staff   128B Oct 26 16:48 Movies
drwx------+  4 josuevhn  staff   128B Sep 26 12:10 Music
drwx------   6 josuevhn  staff   192B Oct 12 12:55 Parallels
drwx------+  4 josuevhn  staff   128B Sep 25 19:45 Pictures
drwxr-xr-x+  4 josuevhn  staff   128B Sep 25 17:50 Public
-rw-r--r--   1 josuevhn  staff   2.4K Oct 29 01:37 empresa.sql
-rw-r--r--   1 josuevhn  staff   468K Oct 29 01:38 server.sql
-rw-r--r--   1 josuevhn  staff   133K Oct 29 01:39 server.sql.gz
╭─josuevhn@WiseRatel ~
╰─$

…ya se habrán dado cuenta al comparar los archivos «server.sql.gz» con el anterior «server.sql», hemos reducido la copia de seguridad de 511K a 137K, esto en el orden de los megas o gigas puede significar un ahorro significativo.

Podemos restaurar nuestras copias de seguridad de manera tan fácil como las creamos:

╭─josuevhn@WiseRatel ~
╰─$ mysqldump -u root -p empresa < empresa.sql

…en el caso de las copias de seguridad comprimidas, podemos o bien descomprimir el archivo con el comando gunzip o reducir estos pasos en uno solo:

╭─josuevhn@WiseRatel ~
╰─$ gunzip < server.sql.gz | mysqldump -u root -p --all-databases

…de esta forma descomprimimos el archivo cuyo flujo es direccionado a través de un «pipe» hacia el comando mysqldump.

Falta aún mucho por aprender… Suscríbete a nuestra lista de correo mediante el formulario en el panel derecho y síguenos en nuestras redes sociales, mantente así al tanto de todas nuestras publicaciones futuras.

Espero que todo cuanto se ha dicho aquí, de una forma u otra le haya servido de aprendizaje, de referencia, que haya valido su preciado tiempo.

Este artículo, al igual que el resto, será revisado con cierta frecuencia en pos de mantener un contenido de calidad y actualizado.

Cualquier sugerencia, ya sea errores a corregir, información o ejemplos a añadir será, más que bienvenida, necesaria!

Get real time updates directly on you device, subscribe now.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More

RECIBE CONTENIDO SIMILAR EN TU CORREO

RECIBE CONTENIDO SIMILAR EN TU CORREO

Suscríbete a nuestra lista de correo y mantente actualizado con las nuevas publicaciones.

Se ha suscrito correctamente!