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.sqlDicho procesamiento puede ser realizar al momento de conectarnos con el servidor.
mysql> source demo.sqlO 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