INTRODUCCIÓN
MySQL
- MySQL fue desarrollado en 1996 por una empresa sueca llamada TCX. Es
una base de datos relacional de código abierto que se encuentra
estrechamente relacionada con productos como PHP, Apache y Linux, que
también son de código abierto. LAMP - LEMP - MEAN - MERN
- Desde enero de 2008 fue adquirida por Sun Microsystems y es manejada
desde 2009 por Oracle,desarrollándola como software libre.
- MariaDB -> FORK
- Postgred SQL, SQL .NET, MariaDB, MySQL, SQLLite
MySQL
- Se estima que hay seis millones de instalaciones de MySQL en el mundo.
- MySQL es un sistema administrador de bases de datos relacionales que
permite el manejo, acceso y almacenamiento seguro y rápido de información.
- Nosotros vamos a instalar la versión de MySQL a través de un sistema
LAMP, el cual incluye MySQL entre sus instalaciones.
MySQL, terminos básicos: Tabla, campo y registro
- Una TABLA es un conjunto de información que tiene relación entre sí.
MySQL, terminos básicos: Tabla, campo y registro
- Una BASE DE DATOS es el conjunto de tablas que describen una entidad de
información mayor. SCHEMA
- Las tablas pueden tener relación entre ellas y ser complementarias.
MySQL, terminos básicos: Tabla, campo y registro
- Las tablas están
formadas por
REGISTROS.
- Estos son la unidad
básica que describe a
un objeto, por ejemplo,
los datos de un artículo
de venta, la
información de una
persona.
MySQL, terminos básicos: Tabla, campo y registro
- A su vez el REGISTRO está formado por CAMPOS o COLUMNAS, que son
la unidad básica de información, y son una propiedad específica de un objeto
o transacción.
MySQL, terminos básicos: Tabla, campo y registro
- Dependiendo de la COLUMNA, esta tendrá un TIPO DE DATO específico,
que indicará la forma de almacenar, las características y limitantes del
CAMPO.
-
MySQL, ¿Como se diseña una BD?
1. Cada tabla deberá tener un nombre único y específico y en plural.
2. Cada una de las tablas deberá tener al menos un campo ()
3. Cada tabla puede tener cero o más filas. Estas pueden estar desordenadas.
4. Cada valor en una COLUMNA tendrá el mismo tipo de dato.
5. A su vez, el campo o conjunto de campos único (que no se repite su valor entre
los diferentes REGISTROS) con el cual se accesa la información de las tablas, y
cuyo valor identifica unívocamente al REGISTRO se le conoce como LLAVE
PRIMARIA
6. Sólo existirá una llave primaria por tabla.
7. Una LLAVE SECUNDARIA (externa o foránea) es un campo o conjunto de
campos, que es una LLAVE PRIMARIA en otra tabla.
8. La relación entre LLAVES PRIMARIAS - LLAVES FORÁNEAS crea una relación
de padre-hijo entre las TABLAS de una base de datos.
MySQL, Tipos de datos
MySQL reconoce varios tipos de datos, o lo que es lo mismo, categoría generales
(abstracciones) cuyos valores se pueden representar.
Numéricos
Los números son valores como 48 o 193.62. MySQL entiende los números
especificados como enteros (sin parte fraccional) o valores de como flotante (que
si lo tienen). Los enteros se pueden especificar de forma decimal o hexadecimal.
MySQL, Tipos de datos
Numéricos
Un entero consiste en una secuencia de dígitos. Un entero hexadecimal está
compuesto por "0xFF0000" seguido de uno o más números hexadecimal.
MySQL reconoce las notaciones científicas. Van indicadas inmediatamente
después de un número entero o de coma flotante con una "e" o "E", un signo "+" o
"-" y un exponente entero. 1.34E+12 y 42.27e-1 son números con notación
científica correcta.
Los decimales se conocerán como DOBLES o de punto FLOTANTE, ya que se
visualizan como un número con dos partes enteras divididas por un punto, por
ejemplo 100.30.
MySQL, Tipos de datos
Cadenas de caracteres
Las cadenas son valores como "MySQL es una base de datos" o "en el mar, la
vida es más sabrosa".
Puede utilizar comillas dobles o sencillas para agrupar a una cadena.
MySQL, Tipos de datos
Fecha y hora
Fechas y horas son valores del tipo "1999-06-17" o "12:30:43". También reconoce
las combinaciones de ambos valores como "1999-06-17 12:30:43".
MySQL mantiene el formato YYYYMMDDHHMMSS, sin embargo se puede
cambiar el mismo con la función DATE_FORMAT().
NULL se puede considerar un valor "sin tipo". Normalmente quiere decir "sin
valor", "valor desconocido", etc- Puede insertar en la tabla valores NULL y hacer
selecciones de campos si tienen en valor NULL, etc.
No se puede realizar ningún operación con el valor NULL, pues su resultado
siempre será NULL.
MySQL, ¿Como definir los tipos de datos de una BBDD?
1. Qué clase de valores quiere almacenar.
2. Cuánto espacio ocupan los valores, si son de longitud fija o de longitud
variable.
3. Cómo se clasifican o comparan los valores del tipo.
4. Si el tipo permite o no valores NULL
5. Si el tipo se puede indexar o no
MySQL, ¿Como definir los tipos de datos de una BBDD?
Comprender los tipos de columna es muy importante para reducir el tamaño de la
base de datos y aumentar su velocidad de los procesos.
MySQL proporciona tipos de columna para todas las categorías de valores de
datos en general, excepto para el valor NULL.
MySQL, Tipos de columnas
VAMOS A CREAR NUESTRA PRIMERA BASE DE DATOS Y REVISAMOS
TODOS LOS TIPOS DE DATOS DE UN BBDD MySQL
MySQL, Tipos de datos Enteros
● TINYINT
● Entera muy pequeña
● Requiere 1 byte
● Con signo -128 a 127
● Sin signo 0 a 255
● MEDIUNMINT
● Entera mediana
● Requiere 3 bytes
● Con signo -8388608 a 8388607
● Sin signo 0 a 1677215
MySQL, Tipos de datos Enteros
● INT
● Entera mediana
● Requiere 4 bytes
● Con signo -2147683648 a
● 2147483647
● Sin signo 0 a 4,294,967,295
● BIGINT
● Entero muy grande
● Requiere 8 bytes
● Con signo -9223372036854775808 a 9223372036854775807
● Sin signo 0 a 18,446,744,073,709,551,615
MySQL, Tipos de datos Enteros
● El rango de los cinco tipos de enteros depende de si tiene o no signo
(UNSIGNED), que es uno de los atributos.
● Un ATRIBUTO es una característica adicional a la columna.
● Para seleccionar algún tipo de columna necesitamos analizar el rango de
nuestra información y seleccionar el tipo más pequeño que satisfaga ese
rango, de lo contrario estaremos desperdiciando recursos de nuestra base de
datos.
● Si usted intenta almacenar un campo mayor al rango del tipo de columna, el
proceso marcará un error y sólo cargará hasta el rango máximo, por ejemplo:
Tiene un campo tipo TINYINT con signo, y almacena un valor como
500,solo se almacenará 127.
MySQL, Atributos de campos numéricos
ZEROFILL: Tanto en Enteros como en punto flotante, se tiene el atributo
ZEROFILL que sirve para rellenar la parte izquierda de la columna en cero.
AUTO_INCREMENT: El sistema numerará desde el número uno a cada uno de
los renglones que sean creados en la tabla.
Solo se puede tener un campo de este tipo y debe ser nombrado como una llave
(PRIMARY KEY) o como clave (UNIQUE). No acepta valores nulos (NOT NULL).
UNSIGNED: Este comportamiento rechaza los valores negativos de una columna
y se ajusta el rango aceptado como se muestra en la tabla de los números
enteros.
MySQL, Tipos de datos Decimal
● FLOAT
● Número único de
● coma flotante
● Requiere 4 bytes
● +-1.175494351E-38
● DECIMAL(M,D)
● Número coma flotante representado como una cadena
● Requiere M+2 bytes
● Depende del valor de M y D
MySQL, Tipos de datos Decimal
● Los número de coma flotante siempre son positivos y negativos.
● No tenemos atributos UNSIGNED.
● Los rangos para una columna DECIMAL son:
DECIMAL(4,1) -99.9 a 999.9
DECIMAL(5,1) -999.9 a 9999.9
DECIMAL(6,1) -9999.9 a 99999.9
DECIMAL(6,2) -999.99 a 9999.99
DECIMAL(6,3) -99.999 a 999.999
MySQL, Tipos de datos Cadena
● MySQL proporciona varios tipos de cadena para mantener los datos de un
carácter.
● Para todos los tipos de cadena, los valores demasiado largos se cortan para
ajustarlos.
● CHAR Cadena de caracteres de longitud fija
● VARCHAR Cadena de caracteres de longitud variable
● TINYBLOB Binary Large Object (BLOB) muy pequeño
● BLOB BLOB pequeño
● MEDIUMBLOB BLOB Mediano
● LONGBLOB BLOB Largo
MySQL, Tipos de datos Cadena
● CHAR Cadena de caracteres de longitud fija
● VARCHAR Cadena de caracteres de longitud variable
● TINYBLOB Binary Large Object (BLOB) muy pequeño
● BLOB BLOB pequeño
● MEDIUMBLOB BLOB Mediano
● LONGBLOB BLOB Largo
● TINYTEXT : Cadena de texto muy pequeña
● TEXT : Cadena de texto pequeña
● MEDIUMTEXT : Cadena de texto mediana
● LONGTEXT : Cadena de texto larga
● ENUM : Una enumeración: columnas a las que se pueden asignar un
miembro de enumeración
● SET : Un conjunto: columnas a las que se pueden asignar múltiples
conjuntos de miembros.
MySQL, Tipos de datos Cadena
● Los tipos de columnas más utilizados son CHAR y VARCHAR.
● Difieren que el primero es de una longitud fija y que el segundo es de una
longitud variable.
● Si los campos que se van a almacenar no varían de longitud drásticamente
(por ejemplo, un número telefónico) no conviene utilizar el campo VARCHAR,
pues tiene un byte adicional de control, y los campos de longitud fija se
procesan más rápido.
● Si existe una columna de longitud variable, todos los registros serán de
longitud variable.
● Solo hay que utilizar los campos de longitud variable cuando se tenga un
problema de espacio en disco.
MySQL, Tipos de datos Cadena
● Si combinas columnas CHAR yVARCHAR, MySQL convertirá las columnas
CHAR (con una longitud mayor a 4) a tipo VARCHAR
● MySQL tiene un bloque de campos TEXT (TINYTEXT, TEXT, MEDIUMTEXT ,
LONGTEXT) con longitud variable de los textos.
MySQL, Tipos de datos Fechas y Tiempo
● MySQL proporciona varios tipos de columna para valores temporales.
● DATE : Requiere 3 bytes.
● Valor de fecha en formato YYYY-MMDD "1000-01-01" a "9999-12-31"
● TIME : Valor de hora en formato HH:MM:SS "-838:59:59" a "838:59:59"
● DATETIME : Valor de fecha y hora en formato YYYY-MM-DD hh:mm:ss
"1000-01-01 00:00:00" a "9999-12-31 23:59:59"
● TIMESTAMP : Valor de un lapso de tiempo en formato YYYYMMDDhhmmss
● YEAR Año en formato YYYY
MySQL, ¿Cómo elegir entre los tipos de las columnas?
● Para poder escoger entre todas las variaciones de tipo de columna, no está
demás hacerse las siguientes preguntas (aunque algunas veces parecerán
obvias):
● ¿Qué tipo de valores, números, cadenas y fechas almacenará la columna?
● ¿Sus valores se corresponden con algún rango?
● ¿Qué tipos de columnas son los más eficientes?
○ Operaciones de cadena vs. numéricas.
○ Tipos más pequeños vs. tipos más grandes.
○ Tipo de longitud fija vs. longitud variable
MySQL, Modelo Entidad Relación
● ENTIDAD: Es el conjunto de elementos relacionados entre si. Ej: Alumnos,
Libros, etc
● RELACIÓN: Elemento que relaciona las dos entidades.
● CARDINALIDAD: Modelo de relación entre dos entidades:
1:1
1:N
N:M (N:N)
MySQL, Modelo Entidad Relación (Un campo dentro de una tabla)
MySQL, Modelo Entidad Relación (Padre - Hijo)
Id de escuela es foreign key dentro de la tabla hija Alumnos
MySQL, Modelo Entidad Relación
Relación muchos - muchos
Productos Clientes
Id
Id
Nombre
Título 1
Email
Precio 1
Password
Tabla intermedia /indices
Id
fk_producto_id
fk_cliente_id
n n
Ejemplo explicacion modelo N-N
MySQL, Modelo Entidad Relación
● CLAVE PRIMARIA (Primary key): selecciona de forma inequivoca un
registro en una tabla. EJ: DNI, matricula. ID
● CLAVE FORANEA (FOREING key): Es la llave con la que vamos a
relacionar con al primary key de otro/as Tablas de nuestra base de datos
MySQL, Sentencias SQL
- La forma que crearemos y manipularemos la información es por medio de un
lenguaje llamado SQL (Structured Query Lenguage).
- Selección de información (Data Query Lenguage o DQL)
- Modificación de información de tablas (Data Modification Language o
DML)
- Creación, vaciado y selección de bases de datos (Data definition
language DDL)
- Creación, alteración y vaciado de tablas e indices
MySQL, Sentencias SQL
- En MySQL se pueden crear varias bases de datos, y dentro de estas varias
tablas. Para crear una base de datos se utiliza la sentencia
CREATE TABLE alumnos(
id INTEGER AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(30) NOT NULL,
apellidos VARCHAR(30) NOT NULL,
nacimiento DATE,
promedio TINYINT,
sexo CHAR(1),
idEscuela TINYINT,
idClase TINYINT,
idCurso TINYINT
);
MySQL, Sentencias SQL
- Para Borrar y Vaciar una tabla de una base de datos
DROP TABLE nombreTabla; //para BORRAR
TRUNCATE TABLE nombreTabla;
// para vaciar la tabla sin borrar
MySQL, Sentencias SQL
- Para INSERTAR VALORES en una tabla en la base de datos.
INSERT INTO tabla (columnas)
VALUES (valores);
INSERT INTO alumnos (nombre,
apellido, nacimiento, promedio, sexo,
idEscuela, idClase, idCurso)
VALUES ("Paco", "Arce",
"1989-02-10", 8, "M", 1, 1,1);
MySQL, Sentencias SQL
- Se pueden omitir los nombres de los campos, pero MySQL los insertará en
orden en que aparecen los campos en la tabla. Hay que tener cuidado al
respecto:
INSERT INTO tabla (columnas)
VALUES (valores);
INSERT INTO alumnos VALUES (0,
"Paco", "Arce", "1966-02-10", 8, "M", 1,
1,1);
MySQL, Sentencias SQL
- En muchas ocasiones es necesario modificar los datos que ya se encuentran
en nuestras tablas. Para ello contamos con la siguiente sentencia:
UPDATE tabla
SET columna=valor [,columna2=valor2...]
[WHERE condición]
[LIMIT n]
UPDATE contactos SET
email="paco@mail.com" WHERE
nombre="Paco";
MySQL, Sentencias SQL
- Donde SET contiene una lista separada por comas de las columnas que
deben actualizarse y el nuevo valor de cada columna, con el formato
columna=valor.
- El valor suministrado por las expresiones incluye elementos tales como
constantes, valores seleccionados de una columna de otra tabla o vista, o
valores calculador por una expresión compleja.
- La cláusula WHERE en la sentencia UPDATE es opcional, y si se omite,
entonces se actualizan TODAS las filas de la tabla destino.
- WHERE: Especifica la condición de búsqueda que define las filas de las
tablas de origen que están calificadas para proporcionar valores para las
expresiones de la cláusula SET.
- LIMIT n establece en n el número máximo de filas que se pueden actualizar.
-
MySQL, Sentencias SQL
- Mucho cuidado: Debido a que puede cambiar en forma definitiva la
información de sus tablas, siempre utilice el UPDATE con la sentencia
WHERE (a menos que desee cambiar todas las columnas por un mismo
valor).
MySQL, Sentencias SQL
- Para BORRAR un registro registro, o grupos de registros, se utilizará la
sentencia DELETE:
DELETE FROM
tabla
[WHERE condicion]
[LIMIT n]
DELETE FROM contactos WHERE
nombre = "Paco";
MySQL, Sentencias SQL
- En esta instrucción también en necesario utilizar la sentencia WHERE,
menos que desee borrar todos los datos de la tabla, por ejemplo:
MySQL, Sentencias SQL
- El listado de consultas SELECT esta en el archivo adjunto en la carpeta MySQL de trabajo
MySQL, Sentencias SQL
JOIN o consultas a tablas de índices o a varias tablas a la vez.
Los JOIN son usados en una sentencia SQL para recuperar datos de varias tablas al mismo tiempo.
Estas tablas tienen que estar relacionadas de alguna forma.
Tenemos varios tipos de JOINS, los vamos a ver uno por uno y cada uno de ellos te servirá para extraer
los datos de una forma específica. Dependiendo de lo que necesites tendrás que echar mano de uno u
otro, o incluso combinarlos entre ellos, que es lo más complejo.
MySQL, Sentencias SQL
INNER JOIN
Los puedes encontrar en el código como INNER JOIN o simplemente JOIN. Este tipo de unión te ayuda a
combinar varias tablas, y te devuelve únicamente los datos que estén disponibles en todas las tablas a la
vez.
Esto significa, que si por ejemplo haces un INNER JOIN para ver los ejercicios que tiene cada cliente,
solo devolverá datos siempre que un ejercicio pertenezca a un cliente. Si un ejercicio no tiene ningún
cliente, pero existe en la tabla, no aparecerá, y si un cliente no tiene ningún ejercicio asociado tampoco
verás a ese
cliente.
MySQL, Sentencias SQL
LEFT JOIN
En este caso, el left join devuelve todos los resultados que coincidan en la primera tabla, con los datos
que tenga de la segunda. En el caso de que falte algún dato, devolverá un valor null en lugar del dato,
pero seguiremos teniendo el valor de la primera tabla
Por ejemplo, si quieres saber todos los ejercicios de los clientes, con un left join tendremos una lista
completa de todos los clientes, incluso si no tienen ningún ejercicio.
MySQL, Sentencias SQL
RIGHT JOIN
En el caso del RIGHT JOIN, pasa exactamente lo mismo que con el anterior, pero con la diferencia de
que devuelve todos los datos de la tabla con la que se relaciona la anterior. Es decir el listado de
ejercicios aunque no tenga clientes asociados.
MySQL, Sentencias SQL
- Necesitamos crear una BBDD para un hospital.
- Vamos a tener, PACIENTES, MEDICOS, ESPECIALIDADES, CLINICA
PACIENTES - nombre, apellido, edad, numeross
MEDICOS - nombre, apellido, numerocolegiado.
ESPECIALIDADES - titulo
CLINICA - nombre, ubicación.
Crear el modelo entidad relación para toda la base de datos. Y plantear las
constrains.
Quiero plantear la consulta de inserción de cada una de las tablas.