MySQL: Polvo somos y en polvo nos convertiremos

Objetivo: revisar los comandos de creación y destrucción de bases de datos, tablas y registros en MySQL.

Con toda nuestra ilusión y repletos de esperanza, creamos una base de datos:

mysql> CREATE DATABASE circunstancias;
Query OK, 1 row affected (0.01 sec)

Una más en la familia:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| cdcol              |
| circunstancias     |
| mysql              |
| performance_schema |
| phpmyadmin         |
| test               |
| webauth            |
+--------------------+
8 rows in set (0.01 sec)

Para trabajar con ella, primero la seleccionamos:

mysql> USE circunstancias;
Database changed

Dándole sentido a nuestra existencia, poblamos la incipiente base de datos con tablas a doquier:

mysql> CREATE TABLE anhelos
    -> (
    -> deseo VARCHAR(50),
    -> fecha DATE
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> CREATE TABLE objetivos
    -> (
    -> objetivo VARCHAR(50),
    -> fecha DATE
    -> );
Query OK, 0 rows affected (0.05 sec)

Nos autocomplacemos contemplando la estructura de nuestras posesiones:

mysql> DESC anhelos;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| deseo | varchar(50) | YES  |     | NULL    |       |
| fecha | date        | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

mysql> DESC objetivos;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| objetivo | varchar(50) | YES  |     | NULL    |       |
| fecha    | date        | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

mysql> SHOW TABLES;
+--------------------------+
| Tables_in_circunstancias |
+--------------------------+
| anhelos                  |
| objetivos                |
+--------------------------+
2 rows in set (0.00 sec)

Y empezamos a coleccionar, a acumular datos sin ton ni son y nos engañamos creyendo que eso da sentido a nuestras vidas:

mysql> INSERT INTO anhelos VALUES
    -> ('Viajar a Marte', '2015-12-31'),
    -> ('Aprender la receta  de las patatas bravas', '2013-7-31');
Query OK, 2 rows affected (0.06 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM anhelos;
+-------------------------------------------+------------+
| deseo                                     | fecha      |
+-------------------------------------------+------------+
| Viajar a Marte                            | 2015-12-31 |
| Aprender la receta  de las patatas bravas | 2013-07-31 |
+-------------------------------------------+------------+
2 rows in set (0.01 sec)

Pero, ¿por qué engañarme? Nunca iré a Marte; nunca aprenderé la receta de la salsa de las patatas bravas.

Y nada es eterno. Ni nuestros datos:

mysql> DELETE FROM anhelos;
Query OK, 2 rows affected (0.05 sec)

mysql> SELECT * FROM anhelos;
Empty set (0.00 sec)

Ni nuestras tablas:

mysql> DROP TABLE anhelos;
Query OK, 0 rows affected (0.03 sec)

mysql> DROP TABLE objetivos;
Query OK, 0 rows affected (0.03 sec)

mysql> SHOW TABLES;
Empty set (0.00 sec)

Ni nuestra base de datos:

mysql> DROP DATABASE circunstancias;
Query OK, 2 rows affected (0.13 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| cdcol              |
| mysql              |
| performance_schema |
| phpmyadmin         |
| test               |
| webauth            |
+--------------------+
7 rows in set (0.01 sec)

Ni nosotros mismos:

mysql> quit
Bye

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2012/12/mysql-polvo-somos-y-en-polvo-nos-convertiremos/


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


¡Accede al índice con todos los artículos sobre MySQL!

MySQL: Eliminación de datos en una tabla

Objetivo: presentar el comando que permite la eliminación de datos de una tabla en MySQL.

En las dos últimas entregas aprendimos los fundamentos para insertar datos en tablas MySQL mediante el comando INSERT. Pero, una vez creados, ¿cómo los eliminamos?, ¿cómo los modificamos? En el artículo de hoy daremos respuesta a la primera pregunta.

Recuperemos la tabla fichajes y observemos su contenido:

mysql> SELECT * FROM fichajes;
+------------+----------+----------+
| fecha      | entrada  | salida   |
+------------+----------+----------+
| 2012-07-01 | 07:32:00 | 17:14:00 |
| 2012-07-02 | 08:15:00 | 17:57:00 |
| 2012-07-03 | 07:31:00 | 16:30:00 |
| 2012-07-04 | 07:25:00 | NULL     |
| 2012-07-05 | 07:45:00 | NULL     |
| 2012-07-06 | 07:30:00 | NULL     |
| 2012-07-07 | 07:15:00 | NULL     |
| 2012-07-08 | 08:01:00 | NULL     |
+------------+----------+----------+
8 rows in set (0.00 sec)

Suponte que queremos eliminar el registro del día 7 de julio. MySQL pone a nuestra disposición el comando DELETE, que usaremos del siguiente modo:

DELETE FROM tabla WHERE condición

Algo que podríamos leer como “borra de la tabla indicada aquello que cumpla cierta condición”.

¿Cuál es la condición que determinará que se borre el registro? Que el campo fecha tenga por valor ‘2012-07-07’. Así pues:

mysql> DELETE FROM fichajes WHERE fecha = '2012-07-07';
Query OK, 1 row affected (0.14 sec)

Constatemos que el comando ha cumplido su misión:

mysql> SELECT * FROM fichajes;
+------------+----------+----------+
| fecha      | entrada  | salida   |
+------------+----------+----------+
| 2012-07-01 | 07:32:00 | 17:14:00 |
| 2012-07-02 | 08:15:00 | 17:57:00 |
| 2012-07-03 | 07:31:00 | 16:30:00 |
| 2012-07-04 | 07:25:00 | NULL     |
| 2012-07-05 | 07:45:00 | NULL     |
| 2012-07-06 | 07:30:00 | NULL     |
| 2012-07-08 | 08:01:00 | NULL     |
+------------+----------+----------+
7 rows in set (0.00 sec)

Como puedes comprobar, el registro de fecha 7 de julio ha sido eliminado de la tabla.

Es necesario que extremes la precaución siempre que uses DELETE. Si la condición de la claúsula WHERE se cumple en varios registros, serán eliminados todos ellos.

Por eso, una buena práctica consiste en ejecutar previamente un comando SELECT, bajo los mismos términos, para obtener el listado de registros afectados.

Imagina, por ejemplo, que queremos eliminar de la tabla fichajes los registros cuya hora de entrada sea superior o igual a las 7:45. Antes de proceder con el comando DELETE es interesante asegurarnos de que los registros que se van a borrar son precisamente los que queremos:

mysql> SELECT * FROM fichajes WHERE entrada >= '07:45:00';
+------------+----------+----------+
| fecha      | entrada  | salida   |
+------------+----------+----------+
| 2012-07-02 | 08:15:00 | 17:57:00 |
| 2012-07-05 | 07:45:00 | NULL     |
| 2012-07-08 | 08:01:00 | NULL     |
+------------+----------+----------+
3 rows in set (0.00 sec)

Observa el uso de la claúsula WHERE también en la sentencia SELECT para filtrar las filas a presentar.

Comprobamos que, efectivamente, esos son los únicos registros que deseamos eliminar. Podemos lanzar ya DELETE sin miedo:

mysql> DELETE FROM fichajes WHERE entrada >= '07:45:00';
Query OK, 3 rows affected (0.03 sec)

Así es como queda nuestra tabla tras esta eliminación:

mysql> SELECT * FROM fichajes;
+------------+----------+----------+
| fecha      | entrada  | salida   |
+------------+----------+----------+
| 2012-07-01 | 07:32:00 | 17:14:00 |
| 2012-07-03 | 07:31:00 | 16:30:00 |
| 2012-07-04 | 07:25:00 | NULL     |
| 2012-07-06 | 07:30:00 | NULL     |
+------------+----------+----------+
4 rows in set (0.00 sec)

¿Y si quisiéramos eliminar todos los registros de la tabla fichajes?

Exactamente igual, con la salvedad de que sobra el WHERE, pues no hay nada que filtrar, ya que no se salvará ninguno:

mysql> DELETE FROM fichajes;
Query OK, 4 rows affected (0.04 sec)

Así de simple.

mysql> SELECT * FROM fichajes;
Empty set (0.01 sec)

Nada que presentar, la tabla está más pelada que el ropero de Tarzán.

Utilizaremos la claúsula WHERE condición en numerosos contextos. Considera el artículo de hoy como un pequeño barniz…

Javier Montero Gabarró


MySQL: Eliminación de datos en una tabla


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


¡Accede al índice con todos los artículos sobre MySQL!