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:
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>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>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>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';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 |
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 ";".
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> 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> 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>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:
La funcion database() nos permite conocer que base de datos estamos utilizando.
mysql> select database();
+------------+
| database() |
+------------+
| |
+------------+
1 row in set (0.13 sec)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)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
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)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)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;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.
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:
| 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 |
create table números (
x int(4) zerofill not null,
y int(5) unsigned
);| 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 |
| 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 |
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
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.
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
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
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.
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> 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> 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>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>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>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>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>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>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>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>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>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>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>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>Inner Join
Left Join
Right Join
MySQL permite realizar uniones entre tablas. Por lo general se lo utiliza para resolver relaciones entre ellas.
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>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>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>