Intro SQL MySQL 1xh Color
Intro SQL MySQL 1xh Color
Elementos de B.D.
Introducción a SQL y
MySQL
Departamento de Ciencias e
Ingeniería de la Computación
Universidad Nacional del Sur
Lenguaje SQL
SQL: Structured Query Language
SQL es un lenguaje de manipulación de datos
(DML) y un lenguaje de definición de datos
(DDL).
Es un lenguaje Procedural muy cercano al
algebra relacional.
Existen muchos dialectos y varios estándares
SQL86, SQL89, SQL92, SQL99, SQL2003,
SQL2005, SQL2008, SQL2011 y SQL2016.
•1
Capacidades del Lenguaje
DDL - Lenguaje de definición de datos.
Definición de relaciones y vistas.
Definición de usuarios y privilegios.
Definición de reglas de integridad.
3
Instalación de MySQL
• Atención! desinstalar primero cualquier versión
anterior instalada de MySQL, solo si está instalada
como un servicio del sistema. Ver sección 2.3 del
manual (ingles: refman-8.0-en.a4.pdf ó español:
refman-5.0-es.a4.pdf). Mas documentación en
http://dev.mysql.com/doc/
• Opción 1: Descomprimir mysql-8.X.XX-winXX.zip en
c:\, luego ejecutar c:\...\bin\mysqld --initialize-insecure
• Opción 2: Ejecutar mysql-8.X.XX-winXX.msi y seguir
las instrucciones.
• Todos los ejemplos presentados en esta clase hacen
referencia a la carpeta “bin” de MySQL. Nos
referiremos a ella de manera general como: …\bin
4
Iniciar el servidor
• El Servidor se puede iniciar y detener
manualmente desde la linea de comandos (cmd).
Hay diferentes opciones, podemos ejecutar:
…\bin\mysqld ó
…\bin\mysqld - -console (muestra los mensajes\
errores por la consola)
• Para detener el servidor ejecutar:
…\bin\mysqladmin -u root shutdown
• Otra alternativa es instalar MySQL como un
servicio de Windows. De esta forma, el servidor
se iniciará y detendrá automaticamente cuando
windows se inicie y se apague respectivamente.
• ver sección 2.3 del manual.
5
Conectándose al Servidor
• MySQL sigue el modelo Cliente-Servidor.
9
Creando una base de datos: ejemplo
• Consideremos una B.D. sobre barcos y batallas:
lanzado
BARCOS BARCO_CLASE CLASES
resultado
RESULTADOS BATALLAS
11
Creando una base de datos: ejemplo
• Nota: si una de las sentencias produce un error,
es posible que alguna de las otras sentencias de
la secuencia se ejecuten con exito. Antes de
ejecutar el archivo nuevamente, borrar la base
de datos desde el cliente con:
mysql> drop database batallas;
•13
Instrucciones del LDD
Para la definición de esquemas:
CREATE TABLE tab_nombre (
atrib1 <tipo> [<restricción>],
atrib2 <tipo> [<restricción>],
....
atribN <tipo> [<restricción>],
<restriccion_integridad_1>,
....
<restriccion_integridad_k>);
•14
Creación de Esquemas
Definir el esquema de la tabla (atributos y sus tipos).
Clave foránea:
•15
Primary key, key, index, unique
•16
Instrucción ALTER TABLE
Permite modificar el esquema de una tabla.
ALTER TABLE <nombre_tabla>
DROP columna1,
MODIFY columna2 <modificación>,
ADD column3 <tipo> [<restricción>],
ADD/DROP CONSTRAINT restricción1 ...
En líneas generales la definición de las tablas debe
ser estática, una vez creado todo el esquema para la
base de datos se espera no tener que modificarlo.
•17
Borrado de Esquemas
La instrucción DROP TABLE <tabla>
permite borrar el contenido y el esquema
de una tabla.
Para poder borrar una tabla la misma no
debe estar referenciada por otra.
De la misma forma, para poder borrar una
columna con ALTER TABLE, esta no debe
estar referenciada por otra tabla.
•18
Lenguaje de Manipulación
de Datos (DML)
•19
Actualizando el contenido de
la Base de Datos
•20
Agregar filas
Existen varias formas de agregar datos a una tabla. Sea
R representa una relación con atributos A1, ..., An y Vi
representa un valor
Sin especificar los atributos:
INSERT INTO R VALUES (V1, ..., Vn)
Especificando todos los atributos
INSERT INTO R(A1, ..., An) VALUES (V1, ..., Vn)
Especificando algunos atributos en cualquier orden. Los
demás atributos toman el valor por defecto de su tipo.
INSERT INTO R(A1, ..., Ak) VALUES (V1, ..., Vk)
•21
Borrar Filas de una tabla
Borrar todas las tuplas de una tabla:
DELETE FROM R;
DELETE FROM barcos;
•23
Actualizar filas de una tabla
Actualizar todas las tuplas de una tabla:
UPDATE R SET<nuevas asignaciones>;
UPDATE barcos SET capitan = “SIMONE”;
•25
Recuperando el contenido de
la Base de Datos (consultas)
•26
Estructura Básica de una
consulta SQL
La estructura básica consiste de tres
cláusulas: SELECT, FROM y WHERE.
SELECT: atributos deseados.
proyección del álgebra relacional.
FROM: una o más tablas.
producto cartesiano del álgebra relacional.
WHERE: condición sobre las túplas.
selección del álgebra relacional.
•27
Semántica Operacional
Una consulta típica SQL es de la forma:
select A1, A2, ..., An
from r1, r2, ..., rm
[ where P ]
Ai representa un atributo
ri representa una relación
P es un predicado sobre los atributos de A1, A2, ..., Am.
A 1 , A 2 , , A n
( P
( r1 r2 rm ))
•28
Proyección
Proyectar todos los atributos del resultado: *
SELECT * FROM …;
SELECT * FROM resultados;
SELECT nombre_barco
FROM resultados
WHERE resultado="hundido" AND
nombre_batalla="North Atlantic";
32
Comparación de Strings
Pueden realizarse comparaciones con
operadores relacionales <, >, >=, <=, =, <>
según el orden lexicográfico.
También comparaciones de patrones:
<Atributo> LIKE <patrón>
<Atributo> NOT LIKE <patrón>
33
Comparación con LIKE
s LIKE p [ESCAPE ‘<caracter>’]
Los caracteres distintos de % y _ deben
corresponderse con ellos mismos.
El caracter % (en s) puede corresponderse
con cualquier cadena de 0 o más caracteres
(en p).
El caracter _ (en s) se corresponde con un
único caracter cualquiera (en p)
34
Selección: ejemplos
SELECT *
FROM batallas
WHERE fecha > "1942-01-01";
SELECT nombre_barco
FROM barcos
WHERE nombre_barco like 'Re%';
SELECT nombre_barco
FROM barcos
WHERE nombre_barco > 'R%';
•36
Multiples relaciones: ejemplos
SELECT *
FROM barcos, resultados;
SELECT *
FROM barcos, resultados
WHERE barcos.nombre_barco=resultados.nombre_barco;
37
Usuarios y Autorización
• La definición de usuarios y la asignación de
privilegios nos permiten restringir el acceso sobre
las bases de datos almacenadas en el servidor.
• Simplifica el uso del sistema y mejora la
seguridad ya que permite a los usuarios acceder
solo a los datos que necesitan.
• Por ejemplo, podemos definir un usuario con
acceso sólo a ciertas tablas dentro de una o mas
bases de datos. Para cada tabla podemos definir
el tipo de acceso (leer , insertar, modificar, etc).
(ver secciones 6.2, 6.3 y 13.7 de refman-8.0-en.a4.pdf o
5.6, 5.7 y 13.5 de refman-5.0-es.a4.pdf). 38
Usuarios y Autorización
• Los usuarios se identifican con un nombre y un dominio:
nombre@dominio
• El dominio identifica desde donde puede conectarse el
usuario al servidor de MySQL.
• ejemplos:
– root@localhost, el usuario root solo puede conectarse
desde la PC donde esta corriendo el servidor MySQL.
– uns@’%.uns.edu.ar’, el usuario uns solo puede
conectarse desde una PC del dominio uns.edu.ar.
– admin@’%’ (o admin, sin especificar dominio), el
usuario admin puede conectarse desde cualquier
dominio. Atencion!: se debe eliminar el usuario vacío
(drop user ’’@localhost) para poder conectarse usando
este usuario desde localhost (ver sección 6.2.7. del manual
refman-5.7-en.a4.pdf)
39
Usuarios y Vistas
• MySQL también permite definir vistas de la
base de datos. (ver capítulo 19 del manual)
• Una vista es una tabla derivada (i.e. calculada
en función de otras tablas o vistas) y
persistente en la Base de Datos.
• Las vistas se crean a partir de una sentencia
select que define su contenido.
• Podemos restringir a los usuario a acceder a
una o mas vistas de una o mas bases de
datos.
40
Usuarios y Autorización
• Estos usuarios, son usuarios del servidor de
MySQL en general y definen niveles o perfiles de
acceso al servidor.
• Generalmente estos usuarios serán utilizados
por las aplicaciones (no por personas) para
acceder al Servidor.
• Un caso particular seria por ejemplo un usuario
admin, utilizado por el administrador (persona)
de la B.D. para tareas de mantenimiento
• Si un sistema requiere la definición de usuarios
(personas), es conveniente definir estos usuarios
dentro de la B.D. del sistema y manejar el
acceso desde la/s aplicación/es utilizando
usuarios definidos en el servidor.
41
Usuarios y Autorización: ejemplo
• Supongamos que en una aplicación que accede a una B.D.
banco de un sistema bancario, queremos definir usuarios
para controlar el acceso de los empleados.
• La B.D. banco contendrá una tabla empleados con
información de los empleados y su password.
• Definimos un usuario empleado en el servidor a través del
cual se conectará la aplicación. El usuario empleado define
el nivel de acceso de un empleado en general.
• La aplicación se encargará de controlar el acceso de los
empleados (por ejemplo requiriendo el usuario y password)
utilizando la información de tabla empleados.
42
Usuarios y Autorización: ejemplo
Servidor MySQL
aplicación bancaria
B.D. banco
usuario: Juan
Tabla empleados
Password: ******
usuario password ...
juan ****** …
… … … La aplicación se conecta
al servidor por medio del
usuario empleado que
B.D. mysql tiene acceso a parte de la
B.D banco y le permite
user ... acceder a la tabla
empleados de la B.D.
root …
banco para validar su
empleado … identidad.
43
MariaDB
• MariaDB es un proyecto de código abierto para
mantener y dar soporte a una versión gratuita de
MySQL.
• Si bien MySQL prove una versión gratuita del servidor
(Community Edition), para utilizarlo de manera
comercial y recibir soporte se debe pagar una licencia
(Enterprise Edition).
• MariaDB esta basado en MySQL y es compatible con
algunas versions de MySQL
https://mariadb.org/en/about/
https://mariadb.com/kb/en/library/mariadb-vs-mysql-compatibility/
44
MariaDB
• Se puede descargar de
https://downloads.mariadb.org/
• Opción zip file: descargar y descomprimir mariadb-
X.X.XX-winXX.zip en (por ejemplo) c:\.
• Una vez descomprimido tiene la misma estructura
de carpetas que MySQL y funciona exactamente
igual. En la Carpeta …/bin se encuentra el servidor
y el cliente como vimos en los ejemplos anteriores.
45