Manual MySQL
Manual MySQL
MANUAL DE COMANDOS
para MySQL
Introducción a MySQL
A nivel teórico, existen 3 lenguajes para el manejo de bases de datos:
DCL (Data Control Language) que es el lenguaje de control de datos, que incluye una serie
de comandos que permiten al administrador controlar el acceso a los datos contenidos en
la base de datos.
Para saber cuántas bases de datos existen en nuestro sistema usamos la sentencia SHOW
DATABASES:
mysql>SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| mysql |
| prueba |
| test |
+--------------------+
3 rows in set (0.00 sec)
mysql>USE prueba;
Database changed
Bases de datos Relacionales MySQL
Veamos ahora la sentencia CREATE TABLE que sirve para crear tablas.
La sintaxis de esta sentencia es muy compleja, pero empezaremos con ejemplos sencillos.
En su forma más simple, la sentencia CREATE TABLE creará una tabla con las columnas
que indiquemos. Crearemos, como ejemplo, una tabla que nos permitirá almacenar
nombres de personas y sus fechas de nacimiento. Deberemos indicar el nombre de la tabla
y los nombres y tipos de las columnas:
mysql> USE prueba
Database changed
mysql>CREATE TABLE gente (nombre VARCHAR(40), fecha DATE);
Query OK, 0 rows affected (0.53 sec)
Hemos creado una tabla llamada "gente" con dos columnas: "nombre" que puede contener
cadenas de hasta 40 caracteres y "fecha" de tipo fecha.
Al final de este documento puedes ver algunos de los tipos de datos en MySQL.
Podemos consultar cuántas tablas y qué nombres tienen en una base de datos, usando la
sentencia SHOW TABLES:
mysql>SHOW TABLES;
+------------------+
| Tables_in_prueba |
+------------------+
| gente |
+------------------+
1 row in set (0.01 sec)
Además del tipo y el nombre, podemos definir valores por defecto, permitir o no que
contengan valores nulos, crear una clave primaria, indexar...
La sintaxis para definir columnas es:
Valores nulos
… NOT NULL / NULL …
Si a un atributo se le declara que puede ser nulo y no se especifica un valor, por defecto, se
usará NULL como valor por defecto. En el ejemplo anterior, el valor por defecto para
poblacion es NULL.
Por ejemplo, si queremos que el valor por defecto para poblacion sea 5000, podemos crear
la tabla como:
mysql>CREATE TABLE ciudad2 (nombre CHAR(20) NOT NULL, poblacion INT NULL
DEFAULT 5000);
Query OK, 0 rows affected (0.09 sec)
Bases de datos Relacionales MySQL
Claves Primarias
… PRIMARY KEY…
Para claves primarias también se puede definir una clave primaria sobre un atributo, usando la palabra
clave KEY o PRIMARY KEY.
Sólo puede existir una clave primaria en cada tabla, y el atributo sobre el que se define una clave
primaria no puede tener valores NULL. Si esto no se especifica de forma explícita, MySQL lo hará de
forma automática.
Por ejemplo, si queremos asignar la clave primaria a “nombre” de la tabla de ciudades, crearemos la
tabla así:
mysql>CREATE TABLE ciudad3 (nombre CHAR(20) NOT NULL PRIMARY KEY, poblacion
INT NULL DEFAULT 5000);
Query OK, 0 rows affected (0.20 sec)
Usar NOT NULL PRIMARY KEY equivale a PRIMARY KEY, NOT NULL KEY o sencillamente
KEY.
Existe una sintaxis alternativa para crear claves primarias, que en general es preferible, ya que es más
potente. De hecho, la anterior es un alias para la forma general, que no admite todas las funciones
(como por ejemplo, crear claves primarias sobre varias columnas). Veremos esta otra alternativa más
adelante.
Bases de datos Relacionales MySQL
Las claves primarias compuestas se usan cuando no hay ningún atributo en la tabla que identifique
cada registro de manera única. Es posible que un conjunto de atributos pueda identificar cada registro
de manera única, en estos casos utilizamos claves primarias compuestas.
En MySQL para establecer que una tabla tenga una clave compuesta, lo indicamos al final del create
table:
+-----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| sala | int(11) | NO | PRI | NULL | |
| num_butaca | int(11) | NO | PRI | NULL | |
| nombre_pelicula | varchar(50) | YES | | NULL | |
+-----------------+-------------+------+-----+---------+-------+
3 rows in set (0.04 sec)
En este ejemplo formamos la clave primaria con el número de sala y el número de butaca para
identificar un asiento concreto en un cine.
En las claves primarias, solo 1 de las columnas puede tener la propiedad auto_increment.
Bases de datos Relacionales MySQL
Columnas Autoincrementadas
… AUTO_INCREMENT …
Generalmente, estas columnas se usan como claves primarias 'artificiales'. MySQL está
optimizado para usar valores enteros como claves primarias, de modo que la combinación
de clave primaria, que sea entera y autoincrementada es ideal para usarla como clave
primaria artificial:
Para establecer un número específico del que partiren el auto_increment hay que crear la tabla de la
siguiente manera:
Comentarios
… COMMENT…
Para eliminar varias columnas seguiríamos la misma sintaxis separando cada columna con
una coma: ALTER TABLE nombre_tabla DROP COLUMN nombre1, DROP COLUMN
nombre2;
Inserción de Filas
INSERT INTO… VALUES(…);
INSERT INTO… SET…
La forma más directa de insertar una fila nueva en una tabla es mediante una sentencia INSERT.
En la forma más simple de esta sentencia debemos indicar la tabla a la que queremos añadir filas, y
los valores de cada columna. Las columnas de tipo cadena o fechas deben estar entre comillas
sencillas o dobles, para las columnas númericas esto no es imprescindible, aunque también pueden
estar entrecomilladas.
Además existe una alternativa que consiste en indicar un valor para cada columna:
Reemplazar Filas
REPLACE INTO … VALUES(…);
Siendo “id” la PRIMARY KEY, queremos reemplazar la columna ‘origen’ de Zaragoza de NULL a
‘caesaraugusta’:
mysql>REPLACE
INTO granciudad (id, nombre, origen) VALUES
(4,'zaragoza','caesaraugusta');
Query OK, 2 rows affected (0.03 sec)
Observamos que se hemos cambiado el valor deseado en la fila con id=4. Has de tener presente
que el comando REPLACE puede realizar una inserción de fila del mismo modo que lo hace el
comando INSERT INTO.
Bases de datos Relacionales MySQL
Actualizar Filas
UPDATE … SET …
UPDATE … SET … WHERE …
Con la sentencia UPDATE podemos actualizar los valores de las filas. Los cambios se aplicarán a
las filas y columnas que especifiquemos.
Como observamos, se han modificado todas las filas. Pero podemos usar la cláusula WHERE para
establecer un filtro de columnas donde queremos que se realicen los cambios. Ejemplo:
En este ejemplo el UPDATE solo ha afectado a la fila de Zaragoza tal y como le hemos especificado
en la cláusula WHERE.
Bases de datos Relacionales MySQL
Eliminar Filas
DELETE FROM…
DELETE FROM … WHERE…
DELETE FROM … WHERE…ORDER BY … ASC/DESC;
DELETE FROM … ORDER BY … ASC/DESC… LIMIT…;
Con la sentencia DELETE podemos eliminar filas de la tabla:
Como podemos observar solo se eliminó la fila cuyo id era 6, es decir, la de ‘malaga’
Bases de datos Relacionales MySQL
También podemos usar las cláusulas LIMIT y ORDER BY en la sentencia DELETE , por ejemplo,
para eliminar los últimos o primeros registros de una tabla.
Por ejemplo , si queremos eliminar las dos primeras ciudades que aparecen en la tabla ordenando
alfabéticamente por su nombre realizaríamos lo siguiente:
Como podemos observar ha eliminado ‘madrid’ y ‘bilbao’ que son las dos primeras ciudades si
ordenamos la lista alfabéticamente por el campo ‘nombre’.
Si en LIMIT hubiésemos puesto 1 solo habría eliminado Bilbao. Si hubiésemos puesto 3 habría
eliminado ‘bilbao’ ‘madrid’ y ‘valencia’.
Bases de datos Relacionales MySQL
La diferencia es que DELETE hace un borrado secuencial de la tabla, fila a fila. Pero TRUCATE
borra la tabla y la vuelve a crear vacía, lo que es mucho más eficiente.
mysql>TRUNCATE granciudad;
Query OK, 0 rows affected (0.44 sec)
Si queremos mostrar todos los registros de una tabla usaremos SELECT * FROM y el nombre
de la tabla. Por ejemplo:
Podemos realizar una consulta donde se nos muestre solo las columnas que nos interesa. Para ello
usaremos SELECT más las columnas que queremos separadas por coma:
También podemos operar con los valores de una columna, por ejemplo si queremos que nos
devuelvan la población en miles pondríamos lo siguiente:
Recuerda que la información en la tabla no se modifica. Lo único que pedimos es mostrar un valor
calculado a partir de la información de la tabla.
En una consulta podría haber registros repetidos, si quisiéramos evitar mostrar las filas repetidas
usaríamos el comando DISTINCT.
Por ejemplo, imaginemos que en la tabla anterior insertamos otro registro que también se llame
madrid, tenga 4 millones de habitantes aunque su id sea otro.
Si consultamos la tabla mostrando los campos nombre y población podremos observar 2 filas
idénticas:
Sin embargo, si usamos DISTINCT solo se nos mostrarán las líneas no repetidas:
idénticas:
Recuerda que aunque se muestren 3 registros, en la tabla hay 4 registros dado que “Madrid
4000000” está repetido.
Bases de datos Relacionales MySQL
Si queremos filtrar las filas que aparecen en la consulta podemos usar la sentencia WHERE, por
ejemplo, partiendo de la tabla siguiente, queremos mostrar solo las ciudades que tienen 2 o más
millones de población:
mysql>SELECT * from granciudad WHERE poblacion >= 2000000 AND id > 10;
+----+-----------+-----------+
| id | nombre | poblacion |
+----+-----------+-----------+
| 30 | barcelona | 2000000 |
+----+-----------+-----------+
1 row in set (0.03 sec)
Además de AND, podríamos usar otros operadores boobleanos como OR, XOR o NOT
Recuerda que puedes ver e informarte sobre los operadores booleanos disponibles con el comando:
HELP LOGICAL OPERATORS
En una cláusula WHERE se puede usar cualquier función disponible en MySQL, excluyendo sólo
las de resumen o reunión, que veremos en el siguiente punto. Esas funciones están diseñadas
específicamente para usarse en cláusulas GROUP BY.
Bases de datos Relacionales MySQL
La cláusula LIMIT puede usarse con 2 parámetros. Cuando se usan ambos, el primero muestra
la fila a partir de la que debemos empezar a mostrar registros, y el segundo parámetro muestra
el número de filas a mostrar (contando desde la primera):
Agrupar Filas
SELECT … FROM … GROUP BY…
SELECT … COUNT(*) FROM … GROUP BY…
SELECT … COUNT(*) AS … FROM … GROUP BY…
SELECT … MAX(…) FROM … GROUP BY … HAVING MAX(…) …
Es posible agrupar filas en la salida de una sentencia SELECT según los distintos valores de una
columna, usando la cláusula GROUP BY. Esto, en principio, puede parecer redundante, ya que
podíamos hacer lo mismo usando la opción DISTINCT. Sin embargo, la cláusula GROUP BY es
más potente.
Podríamos agrupar el resultado de la consulta con el comando GROUP BY de modo que nos
agrupara los registros de la tabla por ciudades:
Observamos que con GROUP BY la salida se ordena según los valores de la columna indicada. En
este caso se ordenan alfabéticamente por el atributo ”nombre”.
Pero la diferencia principal es que el uso de la cláusula GROUP BY permite usar funciones de
resumen o reunión. Por ejemplo, la función COUNT(),que sirve para contar las filas de cada
grupo:
El asterisco de COUNT(*) significa TODAS las filas. Si indicase el nombre de un atributo contaría el
número de registros que no son NULL en ese mismo atributo.
Al final de este documento hay un anexo con la explicación de los distintos comandos asociados a
GROUP BY.
En cualquier caso, para conocer e informarte de todos los operadores de GROUP BY puedes
consultar aquí:
mysql>HELP Functions and Modifiers for Use with GROUP BY
Bases de datos Relacionales MySQL
mysql>
Bases de datos Relacionales MySQL
ANEXO
Por medio del comando “help” de la terminal de MySQL se pueden consultar toda la
información sobre la sintaxis y uso de los comandos MySQL, tales como tipos de
datos, funciones, operadores, seleccionadores, etcétera
“HELP contents”
• DATE: Válido para almacenar una fecha con año, mes y día, su rango oscila entre
‘1000-01-01′ y ‘9999-12-31′.
• DATETIME: Almacena una fecha (año-mes-día) y una hora (horas-minutos-
segundos), su rango oscila entre ‘1000-01-01 00:00:00′ y ‘9999-12-31 23:59:59′.
• TIME: Válido para almacenar una hora (horas-minutos-segundos). Su rango de
horas oscila entre -838-59-59 y 838-59-59. El formato almacenado es ‘HH:MM:SS’.
• TIMESTAMP: Almacena una fecha y hora UTC. El rango de valores oscila entre
‘1970-01-01 00:00:01′ y ‘2038-01-19 03:14:07′.
• YEAR: Almacena un año dado con 2 o 4 dígitos de longitud, por defecto son 4. El
rango de valores oscila entre 1901 y 2155 con 4 dígitos. Mientras que con 2 dígitos el
rango es desde 1970 a 2069 (70-69).
Bases de datos Relacionales MySQL
FUNCIONES DE GRUPOS
Listado de cada uno de los tipos de funciones que se pueden usar con GROUP BY:
• COUNT: Devuelve el número de valores distintos de NULL en las filas recuperadas por
una sentencia SELECT
• AVG: Devuelve el valor medio
• BIT_AND: Devuelve la operación de bits AND: para todos los bits de una expresión
• BIT_OR: Devuelve la operación de bits OR: para todos los bits de una expresión
• BIT_XOR: Devuelve la operación de bits XOR: para todos los bits de una expresión
• COUNT DISTINCT: Devuelve el número de valores diferentes, distintos de NULL
• GROUP_CONCAT: Devuelve una cadena con la concatenación de los valores de un
grupo
• MIN: Devuelve el valor mínimo de una expresión
• MAX: Devuelve el valor máximo de una expresión
• STD: o STDDEV Devuelve la desviación estándar de una expresión
• SUM: Devuelve la suma de una expresión
• VARIANCE: Devuelve la varianza estándar de una expresión