| Tema | Título | Subtema | Versión |
|---|---|---|---|
| 04 | El modelo físco: SQL | Introducción, DDL, DML | v 1.1 |

TEMA 4: El modelo físico: SQL
Introducción

Muchas veces hemos oído estadísticas de fútbol que dicen cosas como:
- Esta jornada se han sacado 7 tarjetas rojas, que es récord esta temporada e igualan el récord de la pasada temporada, que se hizo en la jornada 5.
- El partido de esta jornada con más expulsiones fue el Sevilla-Valencia, con 3. En total fueron expulsados 11 jugadores, pero no supera el récord de la pasada temporada, que eran 12 expulsiones, en las jornadas 6 y 33.
- En lo que va de campeonato, Messi lleva ya más goles que 15 equipos de primera. Sólo 3 clubs superan los 8 goles de Messi: el Betis con 9, el Real Madrid con 16 y, cómo no, el Barça, con 22. Messi acabó la liga pasada con 31 goles. Por el momento, en la presente temporada su media es 1 gol cada 48 minutos.
¿Cómo se hacen todas esas estadísticas? ¿Hay alguien repasando todos los datos una a una de todas las jornadas y va viendo récords, medias, etc? Es evidente que no. Para ello, habrá que hacer, con el lenguaje SQL:
- Crear la estructura idónea de base de datos (sólo una vez):
CREATE TABLE partidos ( ... );
- Introducir los datos de los resultados de los partidos (después de cada jornada):
INSERT INTO partidos VALUES ( ... );
UPDATE partidos SET goles\_casa = goles\_casa + 1 WHERE ...
SELECT SUM(tarjetas)
FROM partidos
WHERE jornada = 7;
Para realizar esas y otras operaciones es necesario un tipo de programa llamado Sistema de Gestión de Bases de Datos (SGBD).
Un SGBD es un conjunto de programas que permiten crear BD, almacenar datos, modificarlos, borrarlos y consultarlos.
El SGBD que vamos a usar nosotros es MySQL (MariaDB).
Este SGBD, como otros muchos, para interactuar con las BD usa el lenguaje SQL: Structured Query Language (Lenguaje de consultas estructurado). Las instrucciones de SQL (sentencias) se pueden clasificar en 5 grupos:
SQL = DDL + DML + DQL + DCL + TCL
- DDL (Lenguaje de Definición de Datos). Crear tablas con los campos, llaves, etc.
- DML (Lenguaje de Manipulación de Datos). Insertar datos en las tablas, borrarlos o modificarlos.
- DQL (Lenguaje de Consulta de Datos). Consultar datos guardados en la BD.
- DCL (Lenguaje de Control de Datos). Restringir permisos de acceso a las tablas a determinados usuarios.
- TCL (Lenguaje de Control de Transacciones). Permitir acceso concurrente (simultáneo) de varios usuarios a los datos.
SQL es un lenguaje informático para realizar labores de gestión con una BD. Las instrucciones (órdenes o sentencias) pueden ejecutarse de forma independiente (consola, etc) o bien pueden incorporarse a otro lenguaje (C, Java...) para permitirnos acceder a una BD desde un programa.
Las sentencias SQL
Todas las sentencias SQL comienzan con una palabra clave que describe lo que hace la sentencia (SELECT, INSERT, DELETE...). La sentencia continúa con una o más cláusulas, que también comienzan con una palabra clave (WHERE, FROM, ORDER BY...).
Las sentencias terminan con “;”
A continuación veremos un resumen de las sentencias más importantes.
| SENTENCIAS SQL | ||
|---|---|---|
| SUBLENGUAJE | SENTENCIA | DESCRIPCIÓN |
| DDL (Definición de datos) | CREATE DATABASE | Crea una BD |
| USE | Selecciona una BD para su uso | |
| DROP DATABASE | Elimina una BD | |
| CREATE TABLE | Crea una tabla | |
| DROP TABLE | Elimina una tabla | |
| ALTER TABLE | Modifica la estructura de una tabla | |
| CREATE INDICE | Crear un índice para una columna | |
| DROP ÍNDICE | Elimina un índice de una columna | |
| CREATE VIEW | Crea una vista | |
| DROP VIEW | Elimina una vista | |
| DML (Manipulación de datos) | INSERT | Añade filas a una tabla |
| DELETE | Eliminar filas de una tabla | |
| UPDATE | Modifica datos de una tabla | |
| DQL (Consultas) | SELECT | Muestra datos de una BD |
| DCL (Control de datos) | GRANT | Da permisos de acceso a usuarios |
| REVOKE | Quita permisos de acceso a usuarios | |
| TCL (Control de transacciones) | BEGIN | Inicia una transacción |
| CONMITO | Finaliza una transacción | |
| ROLLBACK | Aborta la transacción | |
| SAVEPOINT | Para abortar parcialmente la transacción | |
SQL Injection
SQL Injection es una técnica de ataque que permite a un atacante interferir con las consultas que una aplicación hace a su base de datos. Es una de las vulnerabilidades más comunes en aplicaciones web y puede permitir a un atacante ver, modificar o eliminar datos sensibles.
Para prevenir ataques de SQL Injection, es importante utilizar consultas preparadas y parámetros en lugar de concatenar directamente los valores de entrada del usuario en las consultas SQL.
