MySQL

Conexión a un servidor MySQL

mysql -h <servidor.misitio.org> -u <usuario> -p <contraseña>

Podemos conectarnos a un servidor MySQL utilizando el comando mysql e indicando el servidor y las credenciales de acceso.


Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 5 to server version: 5.0.27
Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the buffer.

mysql>

Una vez conectados veremos el siguiente mensaje:

Sentencias

Utilizamos el comando select y para mostrar el resultado de evaluar una serie de funciones.

mysql> select user(), connection_id(), version(), database();

+--------------+-----------------+-------------+------------+
| user()       | CONNECTION_ID() | version()   | database() |
+--------------+-----------------+-------------+------------+
| yo@localhost | 4               | 5.0.27      |            |
+--------------+-----------------+-------------+------------+
1 row in set (0.00 sec)

mysql>

Sentencias

Los comandos pueden escribirse en varias líneas por comodidad, sobre todo al escribir largas sentencias.

mysql> select user(),
-> connection_id(),
-> version(),
-> database();

+--------------+-----------------+-------------+------------+
| user()       | CONNECTION_ID() | version()   | database() |
+--------------+-----------------+-------------+------------+
| yo@localhost | 4               | 5.0.27      |            |
+--------------+-----------------+-------------+------------+
1 row in set (0.00 sec)

mysql>

Sentencias

También permite escribir varias sentencias en una misma linea.

mysql> select now(); select user();

+-----------------------+
| CONNECTION_ID()       |
+-----------------------+
| 4                     |
+-----------------------+
1 row in set (0.00 sec)

+-----------------------+
| user()                |
+-----------------------+
| yo@localhost          |
+-----------------------+
1 row in set (0.01 sec)

mysql>

Sentencias

Los comandos son ejecutados según el orden en el que fueron escritos y pueden ser cancelados utilizando la combinacion "\c".

mysql> select now(),
-> uso
-> ver \c

mysql>

También podemos ingresar cadenas en nuestras sentencias. El contenido de las cadenas no sera evaluado!

mysql> select "Hola mundo",'Felicidades';

Sentencias

Las cadenas también pueden ser escritas en múltiples lineas.

mysql> select "Éste es un texto
"> en dos renglones";

Indicadores MySQL

Inidicador Significado
mysql> Se espera una nueva sentencia
-> La sentencia aun no finalizo con ";"
"> Una cadena en comillas dobles no se ha cerrado
'> Una cadena en comillas simples no se ha cerrado

Variables

Todas las variables definidas son variables de sesión, visibles únicamente durante la conexión actual. 

mysql> select @x := 1;

Podemos definir una variable utilizando el símbolo "@" seguido por el nombre de la variable. Le asignamos un valor con el símbolo ":=" seguido del valor y finalizamos con ";".

Variables

Por lo general son utilizadas para realizar operaciones matemáticas.

mysql> select @x := 1;
mysql> select @x, sqrt(@x), sin(@x), @x + 10, @x > 10;

+------+----------+----------+---------+---------+
| @x   | sqrt(@x) | sin(@x)  | @x + 10 | @x > 10 |
+------+----------+----------+---------+---------+
| 1    | 1.000000 | 0.841471 | 11      | 0       |
+------+----------+----------+---------+---------+

1 row in set (0.01 sec)

mysql> 

Variables

Así como también para almacenar datos entre consultas. Por ejemplo, calcular el tiempo logeado.

mysql> select @hora_ingreso := now();
mysql> select now() - @ingreso;

+-------------------+
| now() - @ingreso  |
+-------------------+
| 20040124138051    |
+-------------------+
1 row in set (0.00 sec)

mysql> 

Variables

Si no le asignamos un valor a una variable dada, será inicializada con el valor NULL.

mysql> select @y,
-> sqrt( @y ),
-> @y + 10,
-> @y < 1 ;

+------+------------+---------+--------+
| @y   | sqrt( @y ) | @y + 10 | @y < 1 |
+------+------------+---------+--------+
| NULL | NULL       | NULL    | NULL   |
+------+------------+---------+--------+

1 row in set (0.00 sec)

mysql>

Procesamiento por Lotes

MySQL permite procesar por lotes las sentencias contenidas en un archivo de texto.

mysql -u juan -h servidor.misitio.org -p < demo.sql

Dicho procesamiento puede ser realizar al momento de conectarnos con el servidor.

mysql> source demo.sql

O bien una vez conectados:

Uso de la Base de Datos

La funcion database() nos permite conocer que base de datos estamos utilizando.

mysql> select database();

+------------+
| database() |
+------------+
|            |
+------------+

1 row in set (0.13 sec)

Uso de la Base de Datos

La expresion show databases nos permite conocer que bases de datos que podemos utilizar.

mysql> show databases;

+-------------+
| Database    |
+-------------+
| demo        |
| mysql       |
| test        |
+-------------+

3 rows in set (0.01 sec)

Uso de la Base de Datos

Podemos usar usa de las bases de datos disponibles utilizando el comando use seguido por el nombre de la base de datos.

mysql> select database();

+------------+
| database() |
+------------+
| demo       |
+------------+

1 row in set (0.13 sec)
mysql> use demo;

Luego utilizando la funcion database() veremos

Uso de la Base de Datos

Podemos consultar por las tablas que contiene nuestra base de datos utilizando la expresión show tables.

mysql> show tables;

+----------------+
| Tables_in_demo |
+----------------+
| partes         |
| proveedores    |
+----------------+

2 rows in set (0.00 sec)

Uso de la Base de Datos

Podemos consultar las columnas de cada una de las tablas mediante la expresión describe seguido por el nombre de la tabla.

mysql> describe productos;
+------------------+--------------------------+------+------+---------+-----------------+
| Field            | Type                     | Null | Key  | Default | Extra           |
+------------------+--------------------------+------+------+---------+-----------------+
| parte            | varchar(20)              | YES  |      | NULL    |                 |
| tipo             | varchar(20)              | YES  |      | NULL    |                 |
| especificicación | varchar(20)              | YES  |      | NULL    |                 |
| Field            | float(6,2)               | YES  |      | NULL    |                 |
| Field            | int(3) unsigned zerofill | YES  | PRI  | NULL    | auto_increment  |
+------------------+--------------------------+------+------+----------+----------------+
5 rows in set (0.00 sec)

Uso de la Base de Datos

Podemos crear una nueva base de datos mediante la expresión create database seguida del nombre de la base de datos a crear.

mysql> create database prueba;

Podemos eliminar una base de datos ya creada utilizando la expresión drop database seguida del nombre de la base de datos a eliminar.

mysql> drop database prueba;

Uso de la Base de Datos

Podemos crear una nueva tabla dentro de una base de datos dada mediante la expresión create table seguida del nombre de la tabla a crear.

mysql> create table personas (
-> nombre char(30),
-> dirección char(40),
-> teléfono char(15)
-> );
mysql> drop table personas;

Podemos eliminar una tabla existente mediante la expresión drop table seguida del nombre de la tabla a eliminar.

Tipos de datos

 Los tipos de datos se pueden clasificar en tres grupos:

 Los siguientes símbolos se utilizan en la definición y descripción de los tipos de datos:

  • Numéricos.
  • Cadenas de caracteres
  • Fechas y horas
  • M - El ancho de la columna en número de caracteres.
  • D - Número de decimales que hay que mostrar.
  • L - Longitud o tamaño real de una cadena.
  • [ ] - Lo que se escriba entre ellos es opcional.

Numericos

Tipo Espacio de almacenamiento Significado
tinyint[(M)] 1 byte  Entero muy pequeño
smallint[(M)] 2 byte  Entero pequeño
mediumint[(M)] 3 byte  Entero mediano
int[(M)] 4 byte  Entero
bigint[(M)] 8 byte  Entero grande
float 4 byte  Simple precisión
double 8 byte  Doble precisión
decimal M + 2 byte   Cadena de caracteres 

Datos Numericos

  • unsigned: Indica que el entero no podrá almacenar valores negativos.
  • zerofill: Indica que la columna, al ser mostrada, rellenará con ceros a la izquierda los espacios vacíos. 
create table números (
    x int(4) zerofill not null,
    y int(5) unsigned
);

Cadenas

Tipo Tamaño máximo Espacio de almacenamiento
char[(M)] M bytes M bytes
varchar[(M)] M bytes L + 1 bytes
tinytext  2^8 −1 bytes L + 1 bytes
text 2^16 −1 bytes L + 2 bytes
mediumtext 2^24 −1 bytes L + 3 bytes
longtext 2^32 −1 bytes L + 4 bytes
enum(’v1’,’v2’,. . . ) 65535 valores 1 o 2 bytes
set(’v1’,’v2’,. . . ) 64 valores 1 a 8 bytes 

Fechas

Tipo Espacio de almacenamiento​ Rango
date 3 bytes  1000-01-01 al 9999-12-31
time 3 bytes  -838:59:59 a 838:59:59
datetime 8 bytes   1000-01-01 00:00:00 a 9999-12-31 23:59:59
timestamp[(M)] 4 bytes  19700101000000 al año 2037
year[(M)]  1 byte 1901 a 2155

Modificación de Tablas

La sentencia alter table permite una amplia gama de formas de modificar una tabla.  Si utilizamos la expresión add agregaremos nuevos campos a la misma.

mysql> alter table personal add (
-> mascota char(30) default ’perro’,
-> pasatiempo char (20) not null
-> );
mysql> alter table personal add capital int not null;

En caso de que quisiéramos agregar una única columna

Modificación de Tablas

También podemos determinar si el nuevo campo a agregar debe ser agregado antes o después de un campo dado utilizando las expresión after y before.

mysql> alter table personal add capital int not null
-> after nombre;
mysql> alter table personal drop pasatiempo;

Las columnas no deseadas pueden eliminarse con la expresión drop.

Modificación de Tablas

También podemos modificar una columna ya definida mediante la expresión modify

mysql> alter table personal modify
-> mascota char (14) default 'gato';
mysql> alter table personal change nombre
-> nom char(20);

Si deseamos cambiar el nombre de una columna debemos recurrir a la expresión change

Modificación de Tablas

También podemos re ordenar una tabla mediante la expresión order by

mysql> alter table personal order by nom;
mysql> alter table personal rename gente;

Si deseamos cambiar el nombre de una tabla debemos utilizar la expresión rename

Sentencia INSERT

Es la forma mediante la cual podemos insertar una nueva fila a una tabla dada.

mysql> INSERT INTO proveedores VALUES ('Tecno-k','crédito');
Query OK, 1 row affected (0.05 sec)

mysql> 
mysql> INSERT INTO proveedores VALUES
    ('Tecno-k','crédito'),
    ('Patito','efectivo');

Query OK, 2 row affected (0.05 sec)

mysql>

E inclusive permite agregar múltiples filas.

Sentencia INSERT

Podemos modificar el orden en el que se agregan los parámetros, indicando nuevo orden.

mysql> INSERT INTO proveedores (empresa,pago) VALUES ('Tecno-k','crédito');
Query OK, 1 row affected (0.05 sec)

mysql> 

También permite tomar los valores por defecto:

mysql> INSERT INTO proveedores VALUES ('Tecno-k', DEFAULT);
Query OK, 1 row affected (0.05 sec)

mysql> 

Sentencia INSERT

Podemos indicar que valor va a tomar cada campo a la hora de crear una nueva fila.

mysql> INSERT INTO proveedores
    -> SET empresa='Tecno-k', pago='crédito';
Query OK, 1 row affected (0.05 sec)

mysql>

Podemos inclusive indicar el valor de id que tendrá el nuevo registro.

mysql> INSERT INTO proveedores (id,empresa) VALUES (1, 'Tecno-k');
Query OK, 1 row affected (0.05 sec)

mysql> 

Sentencia REPLACE

Remplaza una fila existente o crea una nueva en caso de que no exista.

mysql> REPLACE INTO proveedores (empresa,pago) VALUES
    -> ('Tecno-k','crédito');
Query OK, 1 row affected (0.05 sec)

mysql>

Podemos inclusive indicar el valor de id que tendrá el nuevo registro.

mysql> REPLACE INTO proveedores (id,empresa) VALUES
    -> (1, 'Tecno-k');
Query OK, 1 row affected (0.05 sec)

mysql>

Sentencia UPDATE

Permite modificar los valores de una o varias fila de una tabla dada.

mysql> UPDATE proveedores SET pago='crédito';
Query OK, 3 row affected (0.05 sec)

mysql>

Podemos modificar aquellas que cumplan una condición dada utilizando la sentencia WHERE.

mysql> UPDATE proveedores SET pago='crédito' WHERE id=1;
Query OK, 1 row affected (0.05 sec)

mysql>

Sentencia UPDATE

Tambien podemos modificar aquellas que cumplan una serie de condiciones utilizando las sentencias AND y OR.

mysql> UPDATE proveedores SET pago='crédito' 
    -> WHERE empresa='Tecno-k'
    -> OR empresa='Patito';
Query OK, 1 row affected (0.05 sec)

mysql>

Sentencia DELETE

Podemos eliminar una o varias filas de una tabla dada utilizando la sentencia DELETE.

mysql> DELETE FROM proveedores;
Query OK, 5 rows affected (0.05 sec)

mysql>

Podemos eliminar aquellas que cumplan una condición dada utilizando la sentencia WHERE.

mysql> DELETE FROM proveedores WHERE id=1;
Query OK, 1 row affected (0.05 sec)

mysql>

Sentencia TRUNCATE

Podemos eliminar todas las filas de una tabla dada utilizando la sentencia TRUNCATE.

mysql> TRUNCATE proveedores;
Query OK, 5 rows affected (0.05 sec)

mysql>

Sentencia SELECT

Podemos obtener o seleccionar las filas de una tabla dada utilizando la sentencia SELECT.

mysql> SELECT empresa, pago FROM proveedores;

+----------+---------------------+
| empresa  |  pago               |
+----------+---------------------+
| Tecno-k  |  crédito            |
| Patito   |  efectivo           |
| Nacional |  crédito, efectivo  |
+----------+---------------------+
3 rows in set (0.05 sec)

mysql>

Sentencia SELECT

Podemos seleccionar todos los campos de la fila utilizando la el símbolo "*".

mysql> SELECT * FROM proveedores;

+----------+---------------------+
| empresa  |  pago               |
+----------+---------------------+
| Tecno-k  |  crédito            |
| Patito   |  efectivo           |
| Nacional |  crédito, efectivo  |
+----------+---------------------+
3 rows in set (0.05 sec)

mysql>

Sentencia SELECT

Podemos seleccionar un campo en particular de la tabla indicando el nombre de dicho campo únicamente.

mysql> SELECT nombre FROM proveedores;

+----------+
| empresa  |
+----------+
| Tecno-k  |
| Patito   |
| Nacional |
+----------+
3 rows in set (0.05 sec)

mysql>

Sentencia SELECT

Podemos utilizar la sentencia WHERE para seleccionar aquellas filas que cumplan cierta/s condicione/s.

mysql> SELECT * FROM proveedores
    -> WHERE pago='efectivo';

+----------+---------------------+
| empresa  |  pago               |
+----------+---------------------+
| Patito   |  efectivo           |
| Nacional |  crédito, efectivo  |
+----------+---------------------+
2 rows in set (0.05 sec)

mysql>

Sentencia SELECT

Podemos utilizar alias para modificar el nombre de una columna.

mysql> SELECT empresa AS nombre, pago FROM proveedores;

+----------+---------------------+
| nombre   |  pago               |
+----------+---------------------+
| Tecno-k  |  crédito            |
| Patito   |  efectivo           |
| Nacional |  crédito, efectivo  |
+----------+---------------------+
3 rows in set (0.05 sec)

mysql>

Sentencia SELECT

Podemos seleccionar aquellas filas que tengan valores distintos para un campo dado.

mysql> SELECT empresa, DISTINCT pago FROM proveedores;

+----------+---------------------+
| empresa  |  pago               |
+----------+---------------------+
| Tecno-k  |  crédito            |
| Patito   |  efectivo           |
+----------+---------------------+
2 rows in set (0.05 sec)

mysql>

Sentencia SELECT

Podemos agrupar aquellas filas que tengan el mismo valor para un campo dado.

mysql> SELECT * FROM proveedores GROUP BY pago;

+----------+---------------------+
| empresa  |  pago               |
+----------+---------------------+
| Tecno-k  |  crédito            |
| Nacional |  crédito, efectivo  |
| Patito   |  efectivo           |
+----------+---------------------+
3 rows in set (0.05 sec)

mysql>

Uniones entre Tablas

Inner Join

Left Join

Right Join

MySQL permite realizar uniones entre tablas. Por lo general se lo utiliza para resolver relaciones entre ellas.

INNER JOIN

mysql> SELECT username, perfil FROM usuario
    -> INNER JOIN perfil
    -> ON usuario.id_perfil=perfil.id;

+-----------+---------------------+
| username  |  perfil             |
+-----------+---------------------+
| nguidi    |  Invitado           |
| gfrean    |  Administrador      |
| awasing   |  Invitado           |
+----------+----------------------+
3 rows in set (0.05 sec)

mysql>

LEFT JOIN

mysql> SELECT *, perfil FROM usuario
    -> LEFT JOIN perfil
    -> ON usuario.id_perfil=perfil.id;

+-----+-----------+-----------+----------------+
| id  | username  | password  | perfil         |
+-----+-----------+-----------+----------------+
| 1   | nguidi    | hola      | Invitado       |
| 2   | gfrean    | como      | Administrador  |
| 3   | awasing   | estan     | Invitado       |
+-----+-----------+-----------+----------------+
3 rows in set (0.05 sec)

mysql>

RIGHT JOIN

mysql> SELECT *, username FROM usuario
    -> INNER JOIN perfil
    -> ON usuario.id_perfil=perfil.id;

+-----+-----------+----------------+
| id  | username  | perfil         |
+-----+-----------+----------------+
| 7   | nguidi    | Invitado       |
| 8   | gfrean    | Administrador  |
| 9   | awasing   | Invitado       |
+-----+-----------+----------------+
3 rows in set (0.05 sec)

mysql>

MySQL

By Neri Guidi

MySQL

  • 596