0% encontró este documento útil (0 votos)
10 vistas

SQL

El documento es un índice y contenido de un curso completo sobre bases de datos y SQL, que abarca desde la instalación de MySQL y herramientas relacionadas hasta conceptos avanzados como procedimientos almacenados y transacciones. Se detallan temas fundamentales como la normalización, el uso de SQL, la creación de bases de datos y tablas, así como prácticas para aplicar los conocimientos adquiridos. Además, incluye secciones sobre desarrollo web y ejemplos prácticos de implementación.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
10 vistas

SQL

El documento es un índice y contenido de un curso completo sobre bases de datos y SQL, que abarca desde la instalación de MySQL y herramientas relacionadas hasta conceptos avanzados como procedimientos almacenados y transacciones. Se detallan temas fundamentales como la normalización, el uso de SQL, la creación de bases de datos y tablas, así como prácticas para aplicar los conocimientos adquiridos. Además, incluye secciones sobre desarrollo web y ejemplos prácticos de implementación.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 59

00.

INDICE

I. FUNDAMENTOS

01. INTRODUCCION XX [00:05:00] [01]


02. INSTALACION MYSQL XX [00:40:00] [07]
03. FUNDAMENTOS BASES DE DATOS XX [00:30:00] [04]
04. LENGUAJE BASES DE DATOS: SQL XX [03:50:00] [23]
05. PRACTICAS XX [00:35:00] [06]

II. BASES DE DATOS

06. NORMALIZACION XX [00:35:00] [04]


07. MYSQL WORKBENCH XX [00:35:00] [04]
08. MODELO ENTIDAD-RELACION XX [00:35:00] [05]
09. PRACTICAS II - [00:35:00] [03]
10. PRACTICAS III - [00:50:00] [04]

III. BASES DE DATOS II

11. PROCEDIMIENTOS ALMACENADOS XX [00:20:00] [05]


12. TRIGGERS XX [00:25:00] [04]
13. VISTAS XX [00:30:00] [03]
14. TRANSACCIONES XX [00:35:00] [04]
15. PRACTICAS IV - [00:40:00] [04]
16. FUNCIONES AVANZADAS MYSQL XX [00:50:00] [05]

IV. DESARROLLOS

17. CREACION DE BASE DE DATOS [00:30:00] [04]


18. CREACION DE BASE DE DATOS MYSQL [02:45:00] [11]

V. PROGRAMACION WEB

19. HTML - [01:10:00] [14]


20. HTML5 - [00:00:10] [02]
21. ATRIBUTOS HTML - [00:45:00] [09]
22. CSS - [00:35:00] [05]
23: SELECTORES CSS - [00:40:00] [07]

V. DESARROLLOS II

24. WEB LOGIN [01:25:00] [06]


25. WEB VISTA DATOS [01:05:00] [05]
26. WEB REGISTRO [01:15:00] [06]
27. WEB LOGIN & REGISTRO [02:15:00] [09]

VI. DESARROLLOS III

28. WEB ALMACEN [04:20:00] [15]

VII. FINAL
29. DESPEDIDA [00:05:00] [01]
30. BONUS EXTRA [00:05:00] [01]
01. INTRODUCCIÓN

01. RECOMENDACIONES

Curso completo SQL (Bases de Datos).

--
02. INSTALACION MySQL

02. INSTALACION MySQL

Necesario para poder ejecutar lenguaje SQL y lenguaje MySQL en nuestro SO. Instalamos
MySQL e instalamos su Workbench (Banco de Trabajo).

03. INSTALACIÓN HeidySQL

Gestor MySQL donde podemos ejecutar código y crear bases de datos. Como alternativa al
anterior Workbench si nos da problemas. Tendremos que estar utilizando XAMPP, iniciando el
Servicio MySQL dentro del mismo.

04. INSTALACIÓN Xampp

Necesitamos emular un Servidor Local en nuestra propia máquina. Podremos ejecutar código
PHP junto con las Bases de Datos pertinentes. Xampp es el Servidor Local recomendado. Es un
Servidor Linux (Apache). Cuando damos Start nuestra máquina trabajará como Servidor del caso
particular que hayamos activado.

05. INSTALACIÓN Visual Studio Code

VS es el Editor de Código que utilizaremos. Tendremos gran cantidad de Plug-Ins que facilitan
enormemente nuestra tarea.

06. PLUGINS Visual Studio Code

Buscamos el plugin denominado Bracket Pair Colorizer. Lo instalamos.

07. INSTALACIÓN Sublime Text

Alternativa de Editor de Código. Consume pocos recursos de la máquina.

08. PLUGINS Sublime Text

Buscamos, mediante Ctrl + Shif + P, el plugin Install Package. Instalamos ahora el plugin Emmet,
que sirve para autocompletar código. Instalamos ahora el plugin Emmet CSS, que sirve para
autocompletar código.

--
03. FUNDAMENTOS DE BASES DE DATOS

09. BASES DE DATOS

Sistema que permite almacenar, organizar y acceder a datos de manera eficiente, facilitando el
trabajar con grandes volúmenes de información de manera estructurada. Una Lista en Excel es
una Base de Datos. Fundamentalmente encontramos:

 Bases de Datos Relacionales. Son Estructuradas. Organizan la información en Tablas


Relacionadas, permitiendo el uso de un Lenguaje Estructurado de Consulta. Como
ejemplos tenemos: Oracle, MySQL, PostgreSQL. Menos flexibles para datos no
estructurados.

 Bases de Datos No Relacionales. Diseñadas para datos no estructurados, que se


presentan en documentos. Como ejemplos tenemos: Casandra, MongoDB, Firebase.
Usadas en aplicaciones dinámicas como Redes Sociales, y sistemas en Tiempo Real, para
procesar grandes cantidades de datos rápidamente. Menor consistencia al almacenar
datos.

10. ADMINISTRADOR DE BASE DE DATOS

Encargado de mantener y gestionar las bases de datos dentro de una organización, en los
apartados de Seguridad y de Optimización. Tiene cuatro funciones principales:

 Actualización & Mantenimiento. Garantiza su correcto funcionamiento.

 Seguridad. Medidas para proteger el acceso no autorizado.

 Respaldos. Posibilidad de recuperar los datos.

 Optimización & Rendimiento. Aplicando consultas y operaciones de la forma más


eficiente.

11. QUE SON LOS DATOS

Un dato es un espacio en memoria que guarda información a utilizar posteriormente. Se


almacenará en una Columna de una Tabla. Los Tipos de Datos son los siguientes:

 VARCHAR. Almacena Texto de Longitud Variable. Presentarán una capacidad específica.

 CHAR. Almacena Texto de Longitud Fija. Para datos con longitud constante.

 INT. Almacena Número Entero. No presentan decimales.

 DECIMAL. Almacena Número Decimal. Presentan decimales.

12. CONCEPTOS IMPORTANTES DE BASES DE DATOS

Tabla. Espacio de la BBDD donde se organiza la información. Una Tabla se compone por Filas y
Columnas. Literalmente tendremos Filas y Columnas conformando Tablas donde se almacena la
información. Sobre esa Base de Datos podremos hacer operaciones:
La base de datos World contiene una Tabla dedica a City que contiene diferentes datos
organizados por Columnas, con Filas destinadas a cada elemento. Una Tabla se estructura en
Columnas. Las Filas son los distintos elementos que vamos añadiendo a la Tabla, a la Base de
Datos.

Bases de Datos > Tablas > Columnas > Filas

--
04. LENGUAJE DE BASES DE DATOS: SQL

13. SQL

Creado en 1970 en IBM. SQL permite gestionar Bases de Datos. SQL trabaja con conjuntos de
datos y las relaciones entre ellos. La información tendrá sentido en conjunto, de ahí que
trabajemos sus relaciones. La sintaxis SQL se basa en el idioma inglés, muy parecido además a
Visual Basic. Los Comandos SQL se ejecutarán en el Gestor de Bases de Datos a través de una
Línea de Comandos (CLI). Sus elementos constituyentes son:

 Query. Consulta para recuperar datos en base a un determinado criterio.

 Cláusula. Sentencia que nos devuelve Estados de cada Componente de la Base de Datos,
y de cada Query efectuada.

 Comando. Sentencia para el envío de Consultas desde un Cliente hacia un Servidor.

 Expresión. Producen Valores Escalares (Tablas).

 Predicado. Limitan los efectos de las Consultas y de los Comandos. También sirven para
cambiar el Flujo del programa. Funcionan como Condicionales que determinan el Alcance
de un Comando.

14. CLAUSULAS

Son Sentencias. Cada Clausula realiza una función específica dentro de una Instrucción SQL.
Son las que utilizamos para comunicarnos con las Bases de Datos. Una Instrucción se compone
de Clausulas (Sentencias). Como ejemplos:

 SELECT. Selecciona Datos de una Tabla. Especificamos los Nombres de los Campos que
contienen los Datos que queremos Consultar.

 FROM. Muestra las Tablas que contienen los Campos de la Clausula SELECT.

 WHERE. Agrega un Condicional. Especificamos Criterios que tienen que cumplir los
Valores de Campos para que sus Registros sean incluidos en los Resultados de la
Consulta.

 ORDER BY. Ordena Datos para Resultados de una Consulta, de manera Ascendente o de
manera Descendente.

 GROUP BY. Funciones de Agregado, mostrando los Campos no resumidos por SELECT.
Permite segmentar los Datos.

 HAVING. Funciones de Agregado, especificando Condiciones aplicadas a los Campos


resumidos por SELECT.

No son sensibles a M/m (Mayúsculas / Minúsculas), pero se recomienda escribir las palabras
clave en Mayúsculas, y el resto en Minúsculas. Ser sensible a M/m se denomina Case Sensitive.

15. COMANDOS
Existen Dos Tipos de Comandos:

 DDL. Data Definition Language. Comandos que permiten definir nuevas Bases de Datos,
Índices y Campos. Un Campo es un espacio que contiene un Dato. Un Indice es un
espacio que agrupa un Dato.

o CREATE. Crear nuevas Tablas, Campos, Indices.

o DROP. Eliminar Tablas, Campos, Indices.

o ALTER. Modificar Tablas, agregando Campos o modificando su definición.

 DML. Data Manipulation Language. Comandos que permiten manipular Datos. Nos
permiten Insertar, Eliminar y Actualizar Datos, además de generar Consultas para Ordenar,
Filtrar y Extraer dichos Datos.

o INSERT. Cargar Lotes de Datos en una Tabla, en una única operación.

o UPDATE. Modificar los Valores de Campos y Registros especificados.

o DELETE. Eliminar Registros de una Tabla, uno por uno.

16. CONFIGURACION WORKBENCH

Con SQL podemos programar BBDD. Podemos usarlo en el Gestor BBDD que sea: MySQL,
Oracle, SQL Server, etc. Estudiemos ahora todas las Sentencias SQL que usaremos en
Workbench como Interfaz Gráfica para trabajar con MySQL.

Creamos una Instancia en Workbench que nos permite Conectarnos a una Base de Datos.
Hemos de hacer un Test Connection para asegurarnos de que funciona, al momento de crear
dicha Instancia. En Schemas tenemos todas las Bases de Datos que por defecto MySQL trae,
como ejemplos que nos ofrece MySQL:

 SYS. Vistas y Utilidades para supervisar y diagnosticar el estado del sistema de MySQL.

 WORLD. BBDD-Modelo con información sobre ciudades, países y lenguajes. Diseñada


para aprender conceptos básicos, y consultas simples. Permite hacer pruebas.

 SAKILA. BBDD-Modelo que simula un sistema de alquiler de películas. Diseñada para


aprender conceptos complejos, y modelado relacional. Permite hacer pruebas.

17. CREAR UNA BASE DE DATOS CON SQL

En SQL tenemos Palabras Reservadas. Las Palabras Reservadas combinadas de determinada


manera generan Sentencias. La Sintaxis:

CREATE DATABASE <Nombre_Base_Datos>;

Ejecutamos con el Botón Rayo en la zona superior. En Mayúsculas disponemos aquello que es
SQL, en Minúsculas disponemos todo lo demás.
18. CREAR TABLAS

Para rellenar las Bases de Datos que hemos de creado hemos de crear Tablas. Seleccionamos la
Base de Datos que queremos mediante USE.

USE Base_01;
CREATE TABLE <Nombre_Tabla> (<Columnas>);

Creamos la Tabla mediante CREATE. Hemos de especificar el Tipo de Dato que contiene cada
Columna dentro de la Tabla. Mediante VARCHAR nos adaptamos en memoria a la cantidad del
dato que sea, aunque potencialmente quepa más.

Llave Primaria. Primary Key. Identifica a una Tabla. Es un dato dentro de la Tabla que
jamás cambiará. La Columna que cumple este criterio en este caso es ID.

Ya tenemos una Sentencia SQL para la creación de una Tabla. En este momento la Tabla se
presenta vacía.

19. LLENAR UNA TABLA CON DATOS

Aprendamos a usar adecuadamente el USE. Lo usamos para movilizarnos a una Base de Datos.
Creamos una Tabla en Base_02. Para rellenar una Tabla hemos de usar una Sentencia SQL
desde Palabras Reservadas.

USE Base_01;
INSERT INTO <Nombre_Tabla> VALUES (<Valores>);

Los Valores son los Datos que van a estar en cada Columna. Basta con especificar en orden los
Datos que queramos introducir. Recordemos que no podemos duplicar datos de la columna que
sea Llave Primaria.

20. SENTENCIA SELECT

Estaremos usando World para aprender los Comandos Básicos para manejarnos en SQL.
SELECT sirve para mostrarnos información de una BBDD o información de una Tabla, en
específico. Para mostrar Todos los Campos usamos *.

USER world;
SELECT * FROM world.city;

Con esto devolverá toda la información de la Tabla denominada City. Conociendo las Columnas
que forman parte de la Tabla es que podemos Segmentar la información al momento de realizar
la Consulta. Usamos el Nombre de la Columna en cuestión.

SELECT Name FROM world.city;

Podemos seleccionar Varias Columnas en específico.

SELECT ID, Name, District FROM world.city;

También podemos usarlo para cambiar el nombre a Columnas en específico.

USE Base_01;
SELECT Nombre as Name FROM Base_01.Usuarios;

Esto solo afecta al nombre de la Consulta, no a los nombres originales de la Tabla.

21. SENTENCIA WHERE

Es equivalente a un Condicional en Programación. Permite filtrar los Datos en base a la Condición


que sea. Lo usaremos en la misma sentencia que SELECT.

SELECT * FROM world.country WHERE Nombre = “España”;

Usemos ahora una Columna con valores Numéricos. Filtremos todos los Países con menos de
150 como valor en Capital.

SELECT * FROM world.country WHERE Capital < 150;

Ahora queremos los Países cuya región sea diferente a Caribe.

SELECT * FROM world.country WHERE Region < > “Caribe”;

22. SENTENCIA DISTINCT

Permite encontrar aquellos datos que se repiten. Para probarlo necesitamos una Tabla con Datos
repetidos. Es una Palabra Reservada particularmente complementada con SELECT.

SELECT DISTINCT(Columna) FROM BaseDatos.Tabla;

De entre todos los datos mostrará uno solo de tal manera que no se repita para la Columna de
que se trata. Únicamente podemos filtrar una Columna a la vez.

23. SENTENCIA ORDER BY

Permite ordenar de manera ascendente (ASC) o descendente (DESC) Campos de una Tabla.

SELECT * FROM world.city ORDER BY population ASC;


SELECT * FROM world.city ORDER BY population DESC;

Podemos filtrar igualmente mediante Caracteres en lugar de mediante Números.

SELECT * FROM world.city ORDER BY Nombre ASC;


SELECT * FROM world.city ORDER BY Nombre DESC;

24. OPERADORES BOOLEANOS

Veremos ahora Tres Operadores que permiten aumentar la precisión de los filtros que podemos
hacer mediante SELECT, mediante WHERE, y otros.

AND. Operador ‘Y’. Ambas Condiciones deben cumplirse para que se muestren los resultados.

SELECT * FROM world.country WHERE Continente = “Africa” AND Region = “Central”;


OR. Operador ‘O’. Se debe cumplir una u otra de las Condiciones para mostrar los resultados.

SELECT * FROM world.country WHERE Continente = “Europa” OR Codigo = “Pan”;

NOT. Operador ‘No’. No se mostrará el Valor que estemos especificando.

SELECT * FROM world.country WHERE NOT Region = “Norte Europa”;

25. SENTENCIA IN

Similar a OR. Permite ahorrar espacio en Memoria con una Sentencia más corta. Para hacer:

SELECT * FROM world.country WHERE Continente = “Africa” OR Continente = “America”;

Podemos hacer:

SELECT * FROM world.country WHERE Continente IN (“Africa”, “America”);

Es una sintaxis más elegante con un menor uso de memoria, que en aplicaciones de gran entidad
puede marcar una diferencia importante. Todo lo anterior se puede combinar:

SELECT * FROM world.country


WHERE Continente IN (“Africa”, “America”)
AND Region IN (“Caribe”, “Indonesia”);

SELECT * FROM world.country


WHERE Continente IN (“Africa”, “America”)
OR Region IN (“Caribe”, “Indonesia”);

26. SENTENCIA BETWEEN

Permite filtrar dentro de un Segmento definido por nosotros. De aplicación únicamente a números.
Filtramos desde 1 a 1.000.000 de Habitantes. Estas operativas generalmente se combinan con
una ordenación de los datos:

SELECT * FROM world.city


WHERE poblacion BETWEEN 1 AND 1000000
ORDER BY poblacion ASC;

Podemos combinarlo también con la Negativa:

SELECT * FROM world.city WHERE poblacion NOT BETWEEN 1 AND 1000000;

Otra opción sería:

SELECT * FROM world.city


WHERE poblacion BETWEEN (1 AND 1000000)
AND ID BETWEEN (1 AND 1000);

27. SENTENCIA LIKE


Permite filtrar caracteres. Permite afinar mucho las búsquedas dentro de una Base de Datos,
considerando que los humanos somos eminentemente lingüísticos.

SELECT * FROM world.countrylanguage


WHERE lenguaje LIKE ‘S%’;

La Palabra Reservada % indica a SQL que nos resulta indiferente los caracteres presentes en
ese espacio, en este caso posterior a una letra inicial S. Para los que terminan por la letra O
tenemos:

SELECT * FROM world.countrylanguage


WHERE lenguaje LIKE ‘%O’;

Ahora que presenten ‘MA’ juntos en su seno:

SELECT * FROM world.countrylanguage


WHERE lenguaje LIKE ‘%MA%’;

Que empiece con F y termine con L:

SELECT * FROM world.countrylanguage


WHERE lenguaje LIKE ‘F%L’;

Con % alcanzamos todas las permutaciones posibles.

28. CONCATENAR & SUMAR

No son estrictamente específicas de SQL, pero las estaremos utilizando. Funcionarán únicamente
con números. Estaremos sumando dos Columnas.

SELECT Superficie + Poblacion FROM world.country;

La Consulta mostrará una Columna combinada, en este caso con las dos especificadas, donde en
una única Columna hemos fusionado las dos anteriores, presentando por tanto el doble de
longitud de cada una por separado. Sumamos ahora todas las cantidades de una columna en
específico:

SELECT SUM (Superficie) FROM world.country;

Devuelve un único valor numérico.

29. SENTENCIA COUNT & SENTENCIA MIN & SENTENCIA MAX & SENTENCIA AVG

Continuamos con Sentencias que permiten un adecuado y pormenorizado Filtrado de Datos. Si


queremos saber la cantidad de Registros que presenta una Columna usamos la Sentencia
COUNT:

SELECT COUNT(*) FROM world.city;

Con nuestro * es que estamos Contando todos los Datos en cuestión, la Cantidad de Registros
que tenemos, en este caso en toda la Tabla. Sacamos ahora el Valor Mínimo de la Columna
Población:
SELECT MIN(Poblacion) FROM world.city;

Sacamos ahora el Valor Máximo de la Columna Población:

SELECT MAX(Poblacion) FROM world.city;

Sacamos ahora el Promedio de la Columna Población:

SELECT AVG(Poblacion) FROM world.city;

30. SENTENCIA GROUP BY

Agrupamos varios segmentos de información, mostrando únicamente un dato de cada tipo.

SELECT lenguaje FROM world.countrylanguage GROUP BY lenguaje;

En caso de que queramos saber la cantidad que hay cada uno:

SELECT lenguaje, COUNT(*) FROM world.countrylanguage GROUP BY lenguaje;

31. FUNCIONES INTERMEDIAS

Ya conocemos los fundamentos de SQL, una cantidad razonable de Sentencias, y en definitiva


una base sólida para manejarnos con el lenguaje.

Para convertir todo a Mayúsculas usamos UCASE:

SELECT UCASE(nombre) FROM world.city;

Generamos una Columna Nueva con la conversión de la Columna de que se trate a Mayúsculas:

SELECT *, UCASE(nombre) AS “Mayusculas” FROM world.city;

Para convertir todo a Minúsculas usamos UCASE:

SELECT LCASE(CodigoPais) FROM world.city;

Generamos una Columna Nueva con la conversión de la Columna de que se trate a Minúsculas:

SELECT *, LCASE(CodigoPais) AS “Minusculas” FROM world.city;

Concatenamos mediante una Función específica. Se unirá en una nueva Columna con la unión
de las Columnas que concatenemos.

SELECT Nombre, Distrito, CONCAT(Nombre, Distrito) FROM world.city;

Indicamos inicialmente que me muestre cada columna por separado, y luego mediante CONCAT
que muestre ambas Columnas concatenadas. Para agregar un espacio:

SELECT Nombre, Distrito, CONCAT(Nombre, “ “, Distrito) FROM world.city;

Para conseguir lo mismo con otra sintaxis usamos CONCAT_WS, donde agregamos un espacio
por cada Campo agregado. WS significa With Separator:
SELECT Nombre, Distrito, CONCAT_WS(“ “, Nombre, Distrito) FROM world.city;

Operamos ahora sobre Datos Decimales para eliminar precisamente su parte decimal, es decir,
redondear dicha cifra. Utilizamos ROUND para esto.

SELECT EsperanzaVida, ROUND(EsperanzaVida, 0) FROM world.country;

Para conocer la Cantidad de Caracteres que presenta un Campo usamos CHAR_LENGTH.

SELECT Continente, CHAR_LENGTH(Continente) FROM world.country;

32. SENTENCIA CASE

Vemos un nuevo condicional, junto con WHERE. Cuando tenemos Múltiples Condiciones,
usamos un CASE, como espacio que presenta todas esas Condiciones. Dependiendo de la
Condición que se cumpla ejecutará un extracto de código u otro. Conviene incluir un ELSE a
ejecutar en caso de que no se cumpla ninguna de las Condiciones.

SELECT Porcentaje,
CASE
WHEN Porcentaje < 10 THEN “Es menor a 10”
WHEN Porcentaje > 10 THEN “Es mayor a 10”
END
AS Condiciones FROM world.countrylanguaje;

Requerimos mensajes para diferentes Porcentajes de Hablantes de la Base de Datos asociada.


Para un Valor igual a 10 obtendremos un Null. Para cubrir este caso usaremos ELSE.

SELECT Porcentaje,
CASE
WHEN Porcentaje < 10 THEN “Es menor a 10”
WHEN Porcentaje > 10 THEN “Es mayor a 10”
ELSE “Es 10”
END
AS Condiciones FROM world.countrylanguaje;

33. SENTENCIA UPDATE

Veamos cómo Actualizar un Registro que ya existe. Es una operación sumamente fundamental.
Es modificar los Datos de un Campo de una Tabla de una Base de Datos. Al Actualizar es
importante que estemos posicionados sobre la Base de Datos de que se trate.

USE <Base_Datos>;
UPDATE <Tabla> SET <Columna> = <Dato_Actualizado>
WHERE <Tabla> = “ID_Dato_Por_Actualizar”;

USE world;
UPDATE country SET nombre = “El Salvador” WHERE id = “ABW”;

Para Actualizar múltiples Datos de manera simultanea, es decir, Por Lotes. Modificamos ahora
todos los países presentes cuyo Continente sea Asia. Recuerda que toda Tabla debe tener una
Primary Key que permita identificar unívocamente el Dato de que se trate en cada caso.
Hacemos:

USE world;
UPDATE country SET nombre = “El Salvador” WHERE continente = “Asia”;

El “identificador” en este caso es una condición que cumplen múltiples países, concretamente
aquellos cuyo continente es Asia, y por tanto la actualización será de aplicación a todos ellos.
Para modificar elementos sin pasar a través de la Primary Key tenemos que modificar:

Edit > Preferences > SQL Editor > Safe Update > Desmarcar

Cuidado con esto porque podemos modificar fuertemente elementos de la base de datos que
quizá no queramos estar modificando. Reconectamos al servidor para aplicar los cambios:

Query > Reconnect To Server

Cuidado porque aquí no existe Deshacer, no existe Ctrl + Z.

34. SENTENCIA ALTER TABLE

Queremos Agregar un Nuevo Campo que implica una Nueva Columna. Recordemos que para
Crear una Tabla usamos CREATE, especificando los Campos que tiene, junto con los Tipos de
Datos para dichos Campos. Seguiremos una lógica similar.

USE world;
ALTER TABLE city ADD COLUMN country VARCHAR(50);

Ya podemos comenzar a agregar nuestros datos. Con un Gestor de Bases de Datos esto
podemos hacerlo de manera automática. Para agregar de manera manual usamos INSERT.

35. SENTENCIA DROP & SENTENCIA DELETE

Vemos el último proceso fundamental en una Base de Datos que es Eliminar. Hemos visto Crear,
Actualizar, Leer, y faltaba Eliminar. Eliminemos ahora la Columna que hemos creado en la clase
anterior:

USE WORLD;
ALTER TABLE city DROP COLUMN country;

Si queremos eliminar un Registro por completo:

USE Base1;
DELETE FROM usuarios WHERE id = 1;

Si no especificamos una Condición WHERE, se eliminarían todos los datos de la Tabla. Recuerda
que aquí no tenemos Control + Z. Este sería el caso:

USE Base1;
DELETE FROM usuarios;

Para eliminar completamente una Tabla hacemos un DROP.


USE world;
DROP TABLE countrylanguage;

Para eliminar completamente una Base de Datos hacemos un DROP.

USE world;
DROP DATABASE Base1;

--
05. PRACTIQUEMOS LO APRENDIDO

36. EJERCICIO 1

Creación de una Tabla para un Sistema de Bibliotecas. Crearemos una Tabla denominada Libros
que contenga: ID (Entero, Clave Primaria), Titulo (Texto, Hasta 255 Caracteres, No Nulo), Autor
(Texto, Hasta 100 Caracteres, No Nulo), Fecha Publicación (Fecha), Genero (Texto, Hasta 50
Caracteres). Para resolverlo escribimos código SQL.

CREATE TABLE Libros (libro_id INT PRIMARY KEY, titulo VARCHAR(255) NOT NULL,
autor VARCHAR(100) NOT NULL, fecha_publicacion DATE, genero VARCHAR(50));

Con esto se habrá creado correctamente la Tabla Libros.

37. EJERCICIO 2

Creación de una Tabla para un Registro de Ventas. Crearemos una Tabla denominada Ventas
que contenga: ID (Entero, Clave Primaria), Fecha Venta (Fecha), Monto Total (Decimal, Dos
Decimales), Método Pago (Texto, Hasta 20 Caracteres), ID Cliente (Entero). Escribimos SQL.

CREATE TABLE Ventas (venta_id INT PRIMARY KEY, fecha_venta DATETIME,


monto_total DECIMAL(10,2), metodo_pago VARCHAR(20), cliente_id INT);

Con esto se habrá creado correctamente la Tabla Ventas.

38. EJERCICIO 3

Filtrado de Estudiantes por Nota. Tenemos una Tabla denominada Estudiantes con: Estudiante
ID, Nombre, Edad, Nota Final. Queremos una Consulta SQL que seleccione Nombre y Nota Final
de los estudiantes con nota mayor o igual a 80.

SELECT nombre, nota_final FROM estudiantes WHERE nota_final >= 80;

39. EJERCICIO 4

Consultar Productos en Stock. Tenemos una Tabla denominada Productos con: Producto ID,
Nombre, Precio (Decimal), Stock (Entero). Queremos una Consulta SQL que seleccione Nombre
y Precio de los productos con más de 0 unidades con precio menor a 500.

SELECT nombre_producto, precio FROM productos


WHERE cantidad_stock > 0 AND precio < 500;

40. EJERCICIO 5

Ordenar Productos por Precio. Tenemos una Tabla denominada Productos con: Producto ID,
Nombre, Precio (Decimal), Stock (Entero). Queremos una Consulta SQL que seleccione Todos
los Productos, y los Ordene de manera Descendente por Precio.

SELECT * FROM productos ORDER BY precio DESC;


Con esta sencilla Consulta SQL podemos resolver lo que buscábamos.

41. EJERCICIO 6

Agrupar Ventas por Cliente. Tenemos una Tabla denominada Ventas con: Venta ID, Cliente ID,
Monto. Queremos una Consulta SQL que calcule el Monto de las Ventas por Cliente, ordenados
de Mayor a Menor.

SELECT cliente_id, SUM(monto_venta) AS total_ventas FROM ventas


GROUP BY cliente_id ORDER BY total_ventas DESC;

--

--
06. NORMALIZACION

42. QUE ES NORMALIZACION

Tema fundamental para especializarnos en BBDD Relacionales. Permite optimizar


adecuadamente dichas Bases de Datos. La Normalización es el proceso de organizar los datos
para reducir la redundancia y mejorar la integridad de la información. Implementamos
Normalización mediante un Conjunto de Reglas denominadas Formas Normales.

Se realizará dividiendo una Base de Datos en Tablas más pequeñas, que se relacionarán de
forma lógica. La Normalización facilitará la Actualización y el Mantenimiento de la Base de Datos.
Cargar todos los Datos de que dispongamos en un proyecto en una única Tabla puede ser
peligroso, puede generar sobrecargas en la misma.

Formas Normales. Permiten mantener una Base de Datos en óptimas condiciones. Existen Tres
Formas Normales que implementamos a las Tablas en una Base de Datos al aplicar
Normalización.

Primera Forma Normal. 1NF. Garantiza que Cada Columna presente Un Único Valor y
que Todo Valor en una columna sea Del Mismo Tipo. El objetivo es que cada Columna
presente Valores Atómicos, que no puedan ser divididos en partes. No debemos almacenar
por tanto Conjuntos de Datos (Listas) en una única Celda. Como ejemplo, el Nombre de
una persona debe dividirse en Columnas donde Nombre, Apellido_1, Apellido_2 se
presenten separados.

Segunda Forma Normal. 2NF. Requiere que Todos los Atributos No-Clave dependan
completamente de la Clave Principal, eliminando Dependencias Parciales. Como ejemplo,
una Dirección de una persona debe ser dividida en Valores Atómicos (1NF) primeramente,
y luego establecida en una Tabla Independiente, referenciada a la Tabla Principal.

Tercera Forma Normal. 3NF. Asegura que los Datos no dependan de Columnas No-
Clave, eliminando las Dependencias Transitivas que pudieran quedar. Se puede entender
como aplicar la Segunda Forma Normal por segunda vez. En este punto habremos
alcanzado la Normalización Completa.

Aplicar estas formas de Normalización mejora la Integridad, mejora la Consistencia evitando


problemas de Redundancia, y de Actualización en nuestra BBDD.

43. PRACTICA DE NORMALIZACION 1NF

Estaremos usando una Herramienta para Generar Diagramas (Diagramación) denominada


LUCIDCHART, basada en Web. También nos sirve para realizar UML. Veamos ahora de qué
manera implementamos 1NF en una Tabla dada. Podemos hacer también estas operativas en
Excel. Realmente, Excel es una representación viva de lo que es una Base de Datos.

Una Entidad es un elemento (objeto) del mundo real del que queremos almacenar
información. Una Entidad generalmente se modela como una Tabla. Una Entidad presentará al
menos las siguientes Características.

Nombre. Nombre único que describe el tipo de objeto que representa o abstrae.

Atributos. Propiedades del objeto representadas como Columnas.


Identificador Único. ID. Cada Instancia de una Entidad presenta una Identificación Única,
denominada Clave Primaria o Primary Key.

Relaciones. Las Entidades presentan Relaciones entre sí, abstraídas mediante una Clave
Foránea o Foreign Key.

Estudiamos ahora una Tabla en particular, para entender qué Atributos (Columnas) generan una
redundancia en el seno de dicha Tabla.

Los que generan redundancia por contravenir el principio de los Valores Atómicos son: Nombre,
Dirección, Ciudad, País. Para 1NF el que presenta redundancia de datos es Nombre.
Desdoblamos este Atributo en Nombres + Apellidos. Hacemos:

Convendría igualmente dividir Género en Masculino y Femenino. En 1NF buscamos siempre los
Valores Atómicos que componen nuestra Entidad. De esta manera:
44. PRACTICA DE NORMALIZACION 2NF

Una vez alcanzada la Primera Forma Normal (1NF) hemos de eliminar las Dependencia
Parciales. Aquellas Columnas que no forman parte de la Clave Primaria (Primary Key), deben
depender completamente de la Clave Primaria. Para conseguir esto de manera adecuada, hemos
de segmentar en diferentes Tablas aquellos Atributos que presenten relaciones claras entre sí,
abstrayendo sobre una Clave Primaria que será la que presente relación con la Tabla original.

Las Tablas no deben presentar Dependencia Parciales, cada Columna debe depender de
su Clave Primaria.

La Tabla anterior por tanto se disgrega de la siguiente manera:

Estas Relaciones las estudiaremos más adelante en los Modelos Entidad Relación. Con esto
entenderemos de qué manera las Tablas se van relacionando entre sí, conformando en global
una Base de Datos con, precisamente, los Datos adecuadamente estructurados. Esta es una de
las esencias de las Bases de Datos.

45. PRACTICA NORMALIZACION 3NF


Nos aseguramos de que no existan Dependencias Transitivas. Son Dependencias Indirectas de
Atributos No Clave entre sí. Algunos de los Atributos que extrajimos en 2NF deberían poder
derivarse en Atributos a su vez. Buscamos otro ejemplo dado que no se puede aplicar al anterior:

En 1NF encontramos Datos Atómicos. En 2NF separamos Columnas que deben presentar su
propia Tabla, que dependan únicamente de la Primary Key. En 3NF aplicamos 2NF a las Tablas
anteriormente separadas. Para Datos que generen redundancia, los separo en su propia Tabla,
cosa que hacemos con Turno en este ejemplo.

Con esto ya estamos capacitados para Normalizar nuestras propias Bases de Datos para
nuestros proyectos.

--
07. MySQL WORKBENCH

46. CREANDO BBDD EN WORKBENCH

Teniendo Xampp podemos conectarnos a la Base de Datos. En SQLAdditions, en la parte


derecha, encontramos un menú contextual de ayuda. El Panel Central permite implementar
Código SQL. En Navigator vemos las diferentes BBDD que tenemos en nuestro Servidor SQL.

Para crear una Nueva BBDD contamos con un Botón Superior denominado Create A New
Schema. Desde este momento vamos rellenando aquellos datos que nos solicita, tales como
Nombre, y otros, y pulsamos Apply. El Código SQL asociado a esta creación de BBDD es el
siguiente:

CREATE SCHEMA Ejemplo_BBDD;

47. CREANDO TABLA EN WORKBENCH

Crear Tablas en Workbench es una tarea muy sencilla. Sobre la BBDD de que se trate, hacemos
Botón Derecho > Create Table. Rellenamos adecuadamente los datos que se nos solicita. Para
añadir Columnas desde la Interfaz hacemos Column Name > Doble Click. Marcamos las Casillas
pertinentes en base a las siglas que contienen:

 PK. Primary Key. Clave Primaria. Valor único en cualquier momento dado.
 NN. Not Null. No Nulo. Impide la presencia de un valor nulo en esta columna.
 UQ. Unique. Único. Debe presentar valores únicos en cada fila de la columna.
 B. Binary. Binario. Debe presentar valores únicamente binarios.
 UN. Unsigned. Sin Signo. Debe presentar valores únicamente positivos.
 ZF. Zero Fill. Rellenar Ceros. Rellena con ceros hasta completar el tamaño especificado.
 AI. Auto Increment. Incremento Automático. Incrementa en +1 cada ingreso de un dato.
 G. Generated Columns. Columnas Generadas. El valor de la Columna se genera de
forma automática en base a una expresión o fórmula.
 DE. Default Expression. Expresión Por Defecto. Lo marcamos para una Columna dada.

Por cada Doble Click agregamos una Nueva Columna. Hemos de efectuar las pertinentes
Normalizaciones a nuestras Tablas, para no acabar con Tablas muy grandes, difíciles de manejar.
Pulsamos Apply para su generación.

48. EDITANDO TABLA EN WORKBENCH

Para Editar una Tabla desde la Interfaz pulsando en el Botón Herramienta, que aparece al
situarnos sobre la misma. Podemos consultar su Información asociada en el Botón i. Podemos
consultar el contenido de la Tabla desde el Botón Rayo. Al Editar nos aparece el mismo Menú
que obtuvimos al momento de Crearla. En la zona inferior contamos con un Menú Contextual con:

 Columns. Columnas. Con Doble Click agregamos cuantas Columnas consideremos.


 Indexes. Indices. Determinamos la Clave Primaria en este apartado.
 Foreign Keys. Claves Foráneas. Determinamos a qué Campo referencia esta Llave.
 Triggers. Disparadores. Podemos implementarlos para los diferentes momentos, a saber:
BEFORE INSERT, AFTER INSERT, BEFORE UPDATE, AFTER UPDATE, BEFORE
DELETE, AFTER DELETE.
 Partitioning. Particiones. Permite Dividir una Tabla en Tablas Pequeñas.
 Options. Opciones. Permite implementar diversos comportamientos para nuestra Tabla.
En definitiva, una Interfaz Gráfica que nos puede tornar más cómodo el Desarrollo de una BBDD
en determinados momentos, y de la que podemos asistirnos para avanzar más cómodamente.

49. INSERTANDO DATOS EN TABLA

Seleccionamos la Tabla pertinente. Desde el Panel denominado Result Grid, en su apartado


Result Grid, podemos manipular los Datos concretos presentes en la Tabla, simplemente
editando el Campo pertinente. Para guardar los Datos que añadamos hemos de presionar Apply.
Una manera alternativa sería desde Form Editor, en el Lateral Derecho de este mismo panel,
siguiendo los pasos que el propio espacio nos marca.

--
08. MODELO ENTIDAD RELACION

50. MODELO ENTIDAD RELACION – TEORIA

Sigamos avanzando para ser profesionales operando sobre SQL, sobre MySQL.

El Modelo Entidad-Relación (ER) es una Metodología Gráfica para Diseñar y Estructurar Bases
de Datos, representando cómo se relacionan los Datos entre sí en un Sistema. Permite Diseñar
Bases de Datos de manera Estructurada. Permite Visualizar de manera clara las Entidades que
van a representar los Objetos que componen la Realidad Abstraída en la Base de Datos.

Permite entender de qué manera nuestras Tablas se relacionará entre sí en la Estructura de


nuestra Base de Datos. Sus Componentes constituyentes son los siguientes:

 Entidades. Objetos que deseamos abstraer o representar en nuestra Base de Datos,


como una persona, un lugar, un evento. Cada Entidad presentar una serie de Atributos que
definen sus Características. En una Biblioteca, las Entidades pueden ser Libros, Lectores,
etc.

 Relaciones. Describen cómo las Entidades interactúan entre sí. Permiten definir de qué
manera se vinculas los Datos entre dichas Entidades. En una Biblioteca, las Relaciones
pueden ser Préstamo, etc. Cubriendo todas las opciones, pueden ser:

o Uno A Uno. Primera Opción.


o Uno A Muchos. Segunda Opción.
o Muchos A Muchos. Tercera Opción.

 Atributos. Propiedades o Características de una Entidad. En una Persona, los Atributos


pueden ser Nombre, Apellido, etc. Podemos almacenar información específica de cada
detalle que presente una Entidad mediante Atributos.

51. MODELO ENTIDAD RELACION – PRACTICA

Veamos de qué manera podemos conformar un Modelo Entidad-Relación (ER). Vamos a modelar
las Entidades presentes en una Biblioteca existente, para abstraer y digitalizar sus procesos.

Tenemos una Entidad Libro con los siguientes Atributos:

 ID_Libro
 Titulo
 Autor
 Año_Publicacion

Tenemos una Entidad Lector con los siguientes Atributos:

 ID_Lector
 Nombre
 Correo

Tenemos una Relación Prestamo con los siguientes Atributos:

 ID_Prestamo
 F_Prestamo
 F_Devolucion

Lanzando una Flecha desde una Tabla a otra Tabla es que especificamos las Relaciones
existentes entre las mismas. Es la manera Gráfica de visualizar una Relación entre dos Tablas.
Esta aproximación gráfica nos permite clarificar la manera en la que vamos a implementar en el
Gestor de BBDD nuestro Modelo. Es una guía.

Entender qué Relación exacta presentan dos Tablas entre sí depende de la Cardinalidad.

Para modelar de manera completa una Biblioteca contamos en este caso, por tanto, con tres
Tablas. Esta representación gráfica es suficiente para un desarrollo completo, y bastaría con
ceñirnos a este modelado que acabamos de hacer, y que se representa de la siguiente manera:

Nos vamos a nuestro Gestor de BBDD, vamos, y creamos las Tablas y sus Relaciones.

52. CARDINALIDAD – TEORIA

Es la Relación Numérica existente entre Dos Entidades, es decir, la cantidad de veces que una
Entidad puede asociarse con otra Entidad. De la Cardinalidad emerge la cantidad de Procesos
que existen en un negocio dado, en el negocio asociado a nuestra BBDD. Sus posibilidades son:

 Uno A Uno. 1:1. Un Registro de una Entidad se asocia con Un Único Registro de otra
Entidad, y viceversa. Cada Persona puede tener Un Único Pasaporte, cada Pasaporte
puede pertenecer a Una Única Persona. Presenta el siguiente Símbolo:

 Uno A Muchos. 1:N. Un Registro de una Entidad se asocia con Múltiples Registros de otra
Entidad. Cada Autor puede escribir Múltiples Libros, cada Libro es escrito por Un Único
Autor. Presenta el siguiente Símbolo:
 Muchos A Muchos. N:M. Múltiples Registros de una Entidad se asocian con Múltiples
Registros de otra Entidad. Cada Estudiante puede inscribirse en Múltiples Cursos, cada
Curso puede tener inscritos Múltiples Estudiantes. Presenta el siguiente Símbolo:

Se pueden representar también otras permutaciones, para cubrir toda la casuística:

 Uno A Sólo Uno. Presenta el siguiente Símbolo:

 Cero A Uno. Presenta el siguiente Símbolo:

 Cero A Muchos. Presenta el siguiente Símbolo:

53. CARDINALIDAD – PRACTICA

Para delimitar la Cardinalidad hemos de hacernos Dos Preguntas fundamentales:

 ¿Cuál es el Mínimo?
 ¿Cuál es el Máximo?

Partimos de las Entidades vistas en el ejemplo anterior, y las Relacionamos mediante su


Cardinalidad. Son: Libro, Préstamo, Lector.

 ¿Cuál es el Mínimo de Préstamos que se puede aplicar a un Libro? Cero.


 ¿Cuál es el Máximo de Préstamos que se puede aplicar a un Libro? Múltiples.

De Cero A Muchos

 ¿Cuál es el Mínimo de Libros que se puede aplicar en un Préstamo? Uno.


 ¿Cuál es el Máximo de Libros que se puede aplicar en un Préstamo? Uno.

De Uno A Sólo Uno

De resultas de lo anterior, la Relación entre las Entidades Libro y Préstamo quedan


representadas de la siguiente manera:

Continuamos con las preguntas pertinentes:

 ¿Cuál es el Mínimo de Préstamos que se puede aplicar a un Lector? Uno.


 ¿Cuál es el Máximo de Préstamos que se puede aplicar a un Lector? Múltiples.

De Uno a Muchos

 ¿Cuál es el Mínimo de Lectores que se puede aplicar a un Préstamo? Uno.


 ¿Cuál es el Máximo de Lectores que se puede aplicar a un Préstamo? Múltiples.

De Uno A Muchos

De resultas de lo anterior, la Relación entre las Entidades Préstamo y Lector quedan


representadas de la siguiente manera:
Respondiendo a las Dos Preguntas fundamentales podemos implementar la Cardinalidad para
cualquier caso que se presente en nuestras Bases de Datos. La Cardinalidad permite conformar
una Jerarquía en las Tablas creadas.

54. LLAVE PRIMARIA & LLAVE SECUNDARIA

Llave Primaria (Primary Key) es un Identificador Único de una Tabla. Permite conocer cómo
está establecido el Índice de dicha Tabla. Llave Secundaria (Foreign Key) sirve para
Referenciar Datos entre Tablas, de una Tabla a otra Tabla.

Una Llave Secundaria es una Llave Primaria en una Tabla, referenciada a otra Tabla.

Conformamos como ejemplo la Tabla Productos, con: ID_Producto, Nombre, Precio,


ID_Categoria. En este caso, ID_Categoria funcionará como Llave Secundaria (Foreign Key). Para
ello es que conformamos la Tabla Categorias, con: ID_Categoria, Nombre_Categoria.

Para Relacionar ambas Tablas conforme al Modelo Entidad-Relación nos dirigimos a la Tabla
Principal en la sección ForeingKeys. Hacemos:

Foreing Key Name = FK_idCategoria


Reference Table = ‘curso’.’categorias’

A esta Llave Secundaria (Foreing Key) le referenciamos un Campo:

Column = id_categorias
Referenced Column = idCategoria

Para cuando los datos se Actualizan o se Eliminan dentro de la Tabla tenemos Foreing Key
Options:

On Update = NO ACTION
On Delete = NO ACTION

Con RESTRICT no podemos actualizar nuestro dato completamente. Con CASCADE


actualizamos nuestro dato en las tablas referenciadas. Con SET NULL al actualizar nuestro dato
quedará como nulo. Con NO ACTION conseguimos no realizar ninguna acción.

-
09. PRACTICANDO LO APRENDIDO

55. EMPECEMOS LA PRIMERA PRACTICA


10. SIGAMOS PRACTICANDO

58. PRACTICANDO LO APRENDIDO – PARTE 01


11. STORE PROCEDURES (PROCEDIMIENTOS ALMACENADOS)

62. PROCEDIMIENTOS ALMACENADOS

Conjuntos de Instrucciones SQL que se guardan y ejecutan directamente en el Servidor de la


BBDD creados para realizar Tareas Repetitivas y Complejas de manera eficiente, ejecutando una
secuencia de comandos SQL mediante una sola llamada, en lugar de realizar consultas una a
una.

Es una manera de automatizar procesos mediante SQL.

Los Procedimientos Almacenados aceptan Parámetros de Entrada y Parámetros de Salida.

63. DEMOSTRACION DE PROCEDIMIENTOS ALMACENADOS

Queriendo llamar a todos los Registros de la Categoría 0, tendríamos que hacerlo uno por uno
para cada uno de los Productos. Para crear un Procedimiento Almacenado usamos DELIMITER,
que implica que podremos ejecutar los caracteres que contenga el apartado de código. En este
caso lo utilizaremos dado que nuestro Cliente espera ‘;’. Hacemos:

DELIMITER //

CREATE PROCEDURE Nombre


BEGIN
Instrucciones;
END;

//

DELIMITER ;

Mediante BEGIN indicamos el Inicio del Procedimiento Almacenado. END marca el Final del
Bloque de Código. Para Llamar al Procedimiento Almacenado usamos el Método CALL, en
MySQL. Al realizar una Llamada, este Procedimiento nos traerá aquellas Categorías que sean 0,
en su forma específica en la que lo hemos implementado:

CALL seleccionar_categorias_0();

Nos servirá para simplificar nuestro trabajo, al momento de necesitar realizar Tareas Complejas
que se pueden automatizar de esta manera. Redundan también en la Seguridad, estando bien
implementadas, dado que nos exponemos a menos errores acumulados.

64. EJERCICIO DE PROCEDIMIENTOS ALMACENADOS

Realizaremos un Procedimiento Almacenado para Filtrar Productos por Precio. Tenemos una
BBDD que funciona como Inventario, con una Tabla denominada Productos. El Procedimiento
Almacenado debe recibir un Parámetro De Entrada denominado Precio_Minimo, seleccionando y
mostrando todos los Productos cuyo precio sea mayor o igual.

La Tabla Productos, contiene: ID_Producto (INT), Nombre (VARCHAR), Categoria (VARCHAR),


Precio (DECIMAL), Stock (INT). Hacemos:
DELIMITER //
CREATE PROCEDURE ObtenerProductosPrecio(IN precio_minimo INT)
BEGIN
SELECT id, nombre, categoria, precio, stock FROM productos
WHERE precio >= precio_minimo;
END //
DELIMITER ;

Mediante IN es que especificamos el Parámetro De Entrada. Con esto ya tenemos el


Procedimiento Almacenado. Para hacer una Llamada:

CALL ObtenerProductosPrecio(2);

En este caso con un Precio Mínimo de 2, devolviendo todos los registros que sean iguales o
mayores a este Precio Mínimo de 2.

Mediante Procedimientos Almacenados es que podemos Automatizar Tareas de BBDD.

Los Procedimientos Almacenados pueden trabajar junto con Triggers y junto con Vistas.

-
12. TRIGGERS (DISPARADORES)

65. TRIGGERS

Permiten Automatizar acciones en nuestras Bases de Datos. Un Trigger (Disparador) es un


Objeto en una Base de Datos que ejecuta automáticamente una Acción en respuesta a un Evento
específico, que pueden ser: INSERT, UPDATE, DELETE. Se ejecutan en dos momentos
diferentes:

BEFORE. Se ejecuta Antes de que ocurra la acción. Perfecto para validar datos.

AFTER. Se ejecuta Después de que ocurra la acción. Perfecto para auditar datos. Perfecto
para calcular datos.

Presentan gran utilidad en entornos de administración de bases de datos. AUTOMATIZACIÓN.


Realizar tareas repetitivas automáticamente. VALIDACIÓN. Verificar datos correctos antes de
guardarlos. AUDITORÍA. Registrar cambios importantes, como quien realiza modificaciones en
datos. SEGURIDAD. Implementar restricciones adicionales a Claves Primarias y Claves
Foráneas.

66. TRIGGERS (PRÁCTICA)

Creamos un Trigger para Registrar Automáticamente cuando un Usuario es agregado a una


Tabla. Comenzamos creando las siguientes Tablas:

CREATE TABLE usuarios (


id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50),
correo VARCHAR(100),
creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE auditoria_usuarios (


id INT AUTO_INCREMENT PRIMARY KEY,
usuarios_id INT,
accion VARCHAR(20),
fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Para Trigger:

DELIMITER //

CREATE TRIGGER Nombre


AFTER Instrucciones
BEGIN
INSERT INTO Nombre_Tabla;
END;
//

DELIMITER ;
BEGIN siempre lo usamos tanto en Procedimientos Almacenados como en Triggers, donde
hacemos la Consulta (Petición) SQL a la Tabla que corresponda. Especificamos en este caso a
qué Campos vamos a afectar durante dicha Consulta.

Si hacemos una Inserción mediante:

INSERT INTO usuarios (nombre, correo) VALUES ('Daniel Daneri',


[email protected]')

La Tabla denominada Usuarios se habrá actualizado con un nuevo Campo con estos Valores. A
su vez, la Tabla denominada Auditoria_Usuarios se habrá actualizado con un nuevo Campo que
registra el momento en el que se han insertados esos Datos en ese nuevo Campo.

Podemos Automatizar diferentes procesos conformando Triggers (Disparadores).

67. TRIGGERS (PRACTICA II)

Estaremos utilizando ahora BEFORE. Implementamos ahora un Trigger (Disparador) activado


antes de Insertar un Registro, verificando que Precio sea mayor a 0 y, en caso de no serlo, debe
impedir dicha Inserción y mostrar un Mensaje de Error. Creamos la Tabla en cuestión:

CREATE TABLE productos (


id_producto INT AUTO_INCREMENT PRIMARY KEY,
nombre_producto VARCHAR(100) NOT NULL,
precio DECIMAL(10, 2) NOT NULL
);

Para el Trigger:

DELIMITER //

CREATE TRIGGER validar_precio


BEFORE INSERT ON productos
FOR EACH ROW
BEGIN
-- Validar Precio
-- Obtenemos Parámetro Insertado
IF NEW.precio <= 0 THEN
SIGNAL SQLSTATE ‘4500’ SET MESSAGE_TEXT = ‘Precio incorrecto’;
END IF;
END
//

DELIMITER ;

SQLSTATE es un Estado SQL, es decir, un Error SQL, que eventualmente puede ser manejado
por el usuario. Para probar el Trigger hacemos lo siguiente:

INSERT INTO productos (nombre_producto, precio) VALUES (‘Portátil’, 1200.55);

Con la siguiente operativa nos devolvería un Mensaje de Error:

INSERT INTO productos (nombre_producto, precio) VALUES (‘Portátil’, -1200.55);


El Precio tampoco podrá estar siendo exactamente 0. En este caso no se incluirá ningún Registro
dentro de la Tabla pertinente, gracias a nuestro Trigger, operando automáticamente.

-
13. VISTAS

68. VISTAS

Permiten simplificar Consultas Complejas. Permiten presentar Datos Específicos, sin exponer
toda la información contenida en la Base de Datos. Una Vista es una Tabla Virtual generada
mediante una Consulta SQL. No estamos almacenando datos, sino únicamente mostrándolos en
esa configuración determinada que podemos necesitar particularmente en ese momento.

Podemos presentar una Perspectiva específica de los Datos sin generar duplicidades.

Únicamente estamos representando datos ya existentes, sin generar nada, y sin exponer los
datos existentes a posibles manipulaciones indeseadas, erróneas. Cuando conformamos una
Vista estamos creando una Tabla Virtual, sin conectar directamente con la Tabla en sí.

69. VISTAS (PRACTICA)

Usamos la Tabla denominada Productos, conformada anteriormente. Igual para Ventas, con una
Clave Foránea para la Tabla Productos. Conformamos una Vista denominada VentasTotales,
con: Nombre, Cantidad, Ingresos. Para crear una Vista:

DELIMITER //

CREATE VIEW VentasTotales AS


SELECT
p.Nombre AS Nombre_Producto,
SUM(v.Cantidad) AS Total_Cantidad,
SUM(v.Cantidad * p.Precio) AS Ingreso_Total
FROM productos p
JOIN ventas v
ON p.ID_Productos = v.ID_Productos
GROUP BY p.Nombre;
//

DELIMITER ;

Ejecutamos el código anterior mediante el Botón de Crear Vista. Estamos Representando los
Datos en la manera en que queremos presentarlos. No estamos creando ninguna Tabla efectiva
nueva.

70. VISTAS (PRACTICA II)

Creamos una Vista denominada ResumenVentas, combinando Campos de la Tabla Productos y


de la Tabla Ventas. Hemos de Mostrar: Nombre, Precio, Cantidad_Vendida, Total_Ventas,
Fecha_Venta. Comenzamos:

DELIMITER //

CREATE VIEW ResumenVentas AS


SELECT
p.Nombre,
p.Precio,
v.Cantidad AS Cantidad_Vendida,
(p.Precio * v.Cantidad) AS Total_Ventas,
v.Fecha
FROM productos p
JOIN ventas v
ON p.ID_Productos = v.ID_Productos
//

DELIMETER ;

Llamamos ahora a la Vista en cuestión:

SELECT Nombre, Precio, Cantidad_Vendida, Total_Ventas, Fecha


FROM ResumenVentas
WHERE Total_Ventas > 10
ORDER BY Total_Ventas DESC;

Aún dentro de las Vistas podemos personalizar la Consulta. Estamos actuando de tal manera que
la Tabla Virtual actúa como una Tabla normal.

-
14. TRANSACCIONES

71. TRANSACCIONES

Conjunto de Instrucciones que deben cumplirse en su totalidad para ser ejecutadas, y que
despliega un determinado funcionamiento. Funcionan en base a ACID:

 Atomicidad. Deben cumplirse en su Totalidad, es decir, o Todo o Nada. Suponiendo que


haya un problema de suministro de energía y una Transacción quede ejecutándose en su
punto medio, no contabilizará como ejecutada. Tal es su Atomicidad.

 Consistencia. No se pueden destruir datos durante el proceso, es decir, como el


Principio, el Final. Es muy sencillo intuir su necesariedad en una aplicación de
transferencia de dinero, donde el montante inicial debe ser igual a la suma de montantes
finales.

 Aislamiento. Debe presentarse encapsulada y no interferir ni ser interferida ni por otras


Transacciones ni por otros procesos en la aplicación de que se trate, en la base de datos
a la que compela.

 Durabilidad. Una vez cumplida la Transacción, no se presentarán cambios en la misma,


recogiendo un poco la estela de los principios anteriores. Todo o Nada, y una vez Todo,
Todo. Los Datos no se verán modificados una vez finalizada, consumada, la Transacción.

72. TRANSACCIONES (PRACTICA)

Las Transacciones forman parte del funcionamiento interno de SQL. Cuando realizamos una
Consulta, estamos realizando una Transacción. Estudiaremos ahora dos maneras de realizar una
Transacción de manera manual. Hemos de aprendernos Dos Comandos:

 COMMIT. Comando que Valida la Transacción, o Ejecución SQL.

 ROLLBACK. Comando que Revierte la Transacción, si concurre algún Error.

Comenzamos:

BEGIN;

-- Restar Saldo Juan (200 $)

UPDATE cuentas SET saldo = saldo – 200.00 WHERE cuenta_id = 1;

-- Hacer Transacción

UPDATE cuentas SET saldo = saldo + 200.00 WHERE cuenta_id = 2;

-- Confirmar Transacción

COMMIT;

ROLLBACK;
BEGIN informa a SQL que conformamos una sección de código que puede ser una Transacción.
Restamos a una cuenta de Juan 200 $, sumamos a una cuenta de María esos 200 $. ROLLBACK
sólo se estará ejecutando si se produce algún error por el camino, no siendo este el caso. Para
que concurra añadimos lo siguiente antes de hacer la Transacción:

INSERT INTO cuentas (cuenta_id, titular, saldo) VALUES (1, ‘Error en la transacción’, 100);

En este caso el ROLLBACK será de aplicación.

73. TRANSACCIONES (PRACTICA II)

Estudiamos aquí la segunda manera de realizar una Transacción, usando el siguiente Comando:

 START TRANSACTION. Comando para Iniciar una Transacción. Lo usaremos para un


Conjunto de Operaciones que conforman Unidades Lógicas, particularmente en Sistemas
Críticos donde una falla puede dejar los Datos en un estado Corrupto Incompleto.

Comenzamos:

-- Iniciar Transacción
START TRANSACTION;

-- Transacción
UPDATE cuentas SET saldo = saldo – 100.00 WHERE cuenta_id = 1;
UPDATE cuentas SET saldo = saldo + 100.00 WHERE cuenta_id = 2;

-- Cerrar Transacción
COMMIT;

ROLLBACK se verifica mediante la Lógica de nuestra Programación, del Lenguaje que estemos
utilizando. Si queremos Validarlo mediante SQL hemos de implementarlo de una manera muy
específica que estudiaremos en el siguiente apartado.

74. ROLLBACKS

Veremos de qué manera gestionar Errores mediante ROLLBACK. Comenzamos:

DELIMITER //

START TRANSACTION;

-- Primera Operación (Inserción Datos)


INSERT INTO usuarios (nombre, email) VALUES (“Daniel Daneri”, [email protected]);

-- Verificar Operación (Verificar Error)


IF ROW_COUNT() = 0 THEN ROLLBACK;
SELECT “Error: La Primera Operación ha Fallado” AS Resultado;

-- Segunda Operación (Inserción Datos)


ELSE
INSERT INTO usuarios (nombre, email) VALUES (“Celia Culito”, [email protected]);

-- Verificar Operación (Verificar Error)


IF ROW_COUNT() = 0 THEN ROLLBACK;
SELECT “Error: La Segunda Operación ha Fallado” AS Resultado;

-- Efectuamos Transacción
ELSE
COMMIT;
SELECT “Transacción Completada” AS Resultado;

-- Finalizamos Condicionales & Delimiter


END IF;
END IF;
END;
//

DELIMITER ;

ROW_COUNT verifica si se ha ejecutado correctamente la acción. En caso de que Sí, su Conteo


es igual a 1. En caso de que No, su Conteo es igual a 0. El IF, fuera de un Procedimiento
Almacenado, no lo detecta bien SQL. Hemos de implementar un DELIMITER para ello.

-
15. TRIPLE EJERCICIO

75. INTRODUCCION

76. EJERCICIO I

77. EJERCICIO II

78. EJERCICIO III

-
16. FUNCIONES AVANZADAS

79. ENCRIPTACIÓN

Creamos una Tabla denominada Usuarios, con: ID_Usuario (INT), Nombre_Usuario


(VARCHAR(20)), Clave_Usuario (VARCHAR(20)). Insertamos Datos:

INSERT INTO usuarios (Nombre_Usuario, Clave_Usuario)


VALUES (“YoDaneri”, “Asimov90”);
INSERT INTO usuarios (Nombre_Usuario, Clave_Usuario)
VALUES (“Pepito”, “Grillo90”);

Implementamos ahora un Modelo de Seguridad mediante Encriptación. Hacemos:

SELECT Clave_Usuario AS “Contraseña”, AES_ENCRYPT(Clave_Usuario, “Base Datos”)


AS “Encriptado” FROM usuarios;

AES (Avanced Encrypt Standard). Con lo anterior será suficiente para encriptar el dato en
cuestión. Para Desencriptar hacemos:

SELECT Clave_Usuario AS “Contraseña”,


AES_DECRYPT(AES_ENCRYPT(Clave_Usuario, “Base Datos”), ”Base Datos”)
AS “Desencriptado” FROM usuarios;

De esta manera podemos implementar una Capa de Seguridad en nuestras BBDD,


implementando un encriptado de los mismos, de los datos.

80. ENCRIPTACIÓN & CONTEO CARACTERES

Implementamos ahora otro Método de Encriptación, siendo este menos seguro que el anterior.
Conviene investigar los Protocolos de Encriptación para conocer cuando aplicar cada caso. Este
caso nos servirá para una BBDD Local, en entornos controlados. Hacemos:

SELECT Clave_Usuario AS “Contraseña”, COMPRESS(Clave_Usuario)


AS “Encriptado” FROM usuarios;

COMPRESS nos solicita únicamente como Parámetro la Variable que vamos a Encriptar. Esto
será suficiente para Encriptar el Dato en cuestión. Para el paso contrario, la sintaxis se mantiene
coherente, y tenemos:

SELECT Clave_Usuario AS “Contraseña”, UNCOMPRESS(COMPRESS(Clave_Usuario))


AS “Encriptado” FROM usuarios;

Reiteramos la necesidad de que se utilice en entornos controlados. Ahora, para Contar


Caracteres contenidos en un determinado Campo, hacemos:

SELECT Nombre_Usuario AS “Usuario”, LENGTH(Nombre_Usuario)


AS “Caracteres” FROM usuarios;

Esto es suficiente para mostrar la Cantidad de Caracteres que contiene un Campo en específico.

81. CONCATENACION
Concatenamos datos de diferentes Columnas en una única Columna. Usaremos la BBDD llamada
Empresa. Comenzamos:

USE Empresa;

SELECT * FROM Empleado;


SELECT CONCAT(Nombre_Empleado, “ “, Apellido_Empleado)
AS “Nombre_Completo” FROM Empleado;

El Espacio en la Concatenación hemos de explicitarlo. Para implementar automáticamente un


Espacio o cualquier otro Carácter al momento de estar Concatenando, usamos:

SELECT * FROM Empleado;


SELECT CONCAT_WS(“ “, Nombre_Empleado, Apellido_Empleado)
AS “Nombre_Completo” FROM Empleado;

Con estas dos Funciones es que podemos Concatenar Datos.

82. CONTROL USUARIOS

Hacemos PHPMyAdmin > Cuentas De Usuarios > Usuarios. Aquí vemos los Usuarios que tienen
acceso a nuestra BBDD. Hemos de vigilar muy de cerca la Gestión de Usuarios, el Control de
Usuarios. Para crear un Nuevo Usuario habremos de rellenar un Formulario muy pormenorizado,
estableciendo de manera específica el Rol, constreñido mediante los Privilegios. Contar con
Todos los Privilegios en este caso implica:

Podríamos establecer, como vemos, Límites de Recursos, siendo pertinente. Ahora, para
conectar esto en Workbench hacemos: MySQL Connections > Setup New Connection. Volvemos
a rellenar el Formulario pertinente. Con esto ya tendremos el Perfil de Usuario creado.

83. FECHAS

Continuamos con Funciones Avanzadas de gran utilidad en nuestros desempeños. Crearemos


una BBDD denominada Avanzada. Crearemos una Tabla denominada Productos, con las
siguientes Columnas: idProductos, Nombre_Producto, Precio_Producto, Fecha_Garantia. Ahora
rellenamos la Tabla con los Datos preceptivos:

USE Avanzada;
SELECT * FROM Productos;
INSERT INTO Productos (Nombre_Producto, Precio_Producto, Fecha_Garantia)
VALUES (“Martillo”, 12.99, “2020-02-02”);
INSERT INTO Productos (Nombre_Producto, Precio_Producto, Fecha_Garantia)
VALUES (“Destornillador”, 10.99, “2020-02-02”);

Como Función Avanzada tenemos:

SELECT Fecha_Garantia AS “Fecha_Adquisicion”,


ADDDATE(Fecha_Garantia, 90) AS “Fecha_Expiración”
FROM Productos;

A la Fecha_Garantia le hemos sumado 90 días usando el Método ADDDATE. Esta es una forma
que tenemos de sumar fechas de manera avanzada.

84. INNER JOIN

Método para unificar información de diferentes Tablas que presentan Parámetros en común. Se
unirá la Información cuando cumpla una determinada Condición. Se puede desplegar de manera
Implícita o de manera Explícita. Partimos de las Tablas Clientes y Ventas. De la primera
requerimos los Campos Nombre y Ciudad. De la segunda el Campo Monto_Venta. Hemos de
tener un Campo en común entre las Tablas, que en este caso será ID_Cliente. De manera
Explícita:

SELECT
clientes.nombre,
clientes.ciudad,
ventas.monto_venta
FROM
clientes
INNER JOIN
ventas
ON
clientes.cliente_id = ventas.cliente_id;

Esto nos permite presentar Vistas personalizadas de manera eficiente. Ahora, de manera
Implícita:

SELECT
clientes.nombre,
clientes.ciudad,
ventas.monto_venta
FROM
clientes, ventas
WHERE
clientes.cliente_id = ventas.cliente_id;

Estamos haciendo un Inner Join, pero sin realizarlo mediante su método específico. Lo
recomendado es utilizar la Manera Explícita, siendo más elegante y estando implementada
precisamente para ser utilizada.
-
17. CREACION BASE DE DATOS (PRÁCTICA)

85. INTRODUCCION

86. NORMALIZACION DE TABLAS

87. IDENTIFICACION DE ATRIBUTOS & ENTIDADES

88. INSERCIÓN Y MOSTRADO DE DATOS

-
18. CREANDO BASE DE DATOS DESDE CERO (MYSQL)

89. INTRODUCCION

Crearemos una BBDD desde cero, aplicando todos los conocimientos adquiridos en MySQL. Una
ficticia Institución González nos solicita realizar una BBDD que guarde la Información del Personal
que trabaja en dicha Institución, así como de los Estudiantes que se matriculen. La naturaleza
propia del problema nos presenta de manera muy evidente las Entidades que se presentan:

 Maestros
 Estudiantes
 Terceros

El Personal de Terceros se podría diferenciar a su vez en diferentes Entidades. Esto atendería a


la Atomicidad, que realmente estaremos aplicando en etapas posteriores al momento de la
Normalización. Aunque si somos capaces de observarlo de partida, mejor. Los Datos expresos
que presentarán serán los siguientes:

Maestros: Nombre, Apellido, Edad, Código, Sección, Teléfono, Género.


Estudiantes: Nombre, Apellido, Edad, Código, Sección, Teléfono, Género, Madre, Padre.
Terceros: Nombre, Apellido, Edad, Código, Cargo, Teléfono, Género.

Un Maestro puede enseñar a Varios Estudiantes. Varios Estudiantes pueden tener a Un Maestro
por cada Clase. La Institución puede tener Varios Maestros. Varios Maestros pueden estar
vinculados a Una Única Institución.

Una situación profesional real requerirá que nosotros identifiquemos, usando nuestra lógica,
cuales son las Entidades, cuales son los Atributos, cuales son las Relaciones. Cuando mejor
estilicemos esta parte del proceso que requiere de un análisis pormenorizado, mejor modelada
estará nuestra BBDD. Y cuanto mejor modelada esté, mejor funcionamiento presentará nuestro
código, nuestro programa. Recordemos que la digitalización se trata de abstraer, de virtualizar el
mundo real.

El conocimiento que vamos a aplicar aquí es un subconjunto de todo lo que hemos aprendido. Es
decir, el conocimiento necesario dentro de ese conocimiento global, que necesitamos para
desarrollar esta base de datos en específico.

90. IDENTIFICANDO ENTIDADES & ATRIBUTOS

91. IDENTIFICANDO ENTIDADES & ATRIBUTOS – PARTE II

92. NORMALIZANDO TABLAS

93. CREANDO TABLAS


94. CREANDO TABLAS – PARTE II

95. CAMBIOS EN LA BBDD

96. IMPLEMENTANDO TRIGGERS

97. ADVERTENCIA

98. MODIFICANDO TRIGGERS

99. FINALIZACION

-
24. CREANDO UN LOGIN

137. INTRODUCCION

Crearemos un Login en HTML. Posteriormente crearemos también un Registro en HTML.


Posterior, es que crearemos un proyecto con ambos elementos, Login y Registro, a los que
podremos acceder mediante un Menú que permita transicionar entre ambos.

138. CREANDO BBDD

Crearemos un Login aplicando CSS y HTML en profundidad. Crearemos la BBDD donde


funcionará nuestro Login. Hacemos Create New Schema desde el Menú Contextual. La
denominamos Login. Crearemos Tablas desde este punto, comenzando por Usuarios.
Generamos las preceptivas Columnas: ID_Usuario, Usuario, Contraseña, Fecha_Registro. Esta
última ingresará de manera automática un CURRENT_TIMESTAMP.

Conformar todo lo anterior mediante Menú Contextual nos genera el siguiente Código:

CREATE TABLE ‘login’, ‘usuarios’ (


‘ID_Usuario’ INT NOT NULL AUTO_INCREMENT,
‘Usuario’ VARCHAR(45) NOT NULL,
‘Contraseña’ VARCHAR(45) NOT NULL,
‘Fecha_Registro’ DATE NULL DEFAULT CURRENT_TIMESTAMP(),
PRIMARY KEY (‘ID_Usuario’));

Tenemos en este momento, claro está, una Base de Datos que se presenta vacía, con una Tabla
que se presenta vacía. Insertamos Datos:

USE Login;

INSERT INTO Usuarios (Usuario, Contraseña) VALUES (‘YoDaneri’, ‘Android00’);


INSERT INTO Usuarios (Usuario, Contraseña) VALUES (‘Manuela’, ‘Manuela00’);
INSERT INTO Usuarios (Usuario, Contraseña) VALUES (‘Laura’, ‘Laura00’);
INSERT INTO Usuarios (Usuario, Contraseña) VALUES (‘Clotilde’, ‘Clotilde00’);
INSERT INTO Usuarios (Usuario, Contraseña) VALUES (‘Antunez’, ‘Antunez00’);

Iniciamos Auto-Incrementable:

ALTER TABLE Usuarios AUTO_INCREMENT = 1;

Estos Usuarios los utilizaremos al momento de realizar el Login pertinente. Haremos ahora HMTL,
CSS y Documentación.

139. DISEÑO DE LOGIN

Realizaremos el HTML de nuestro Login. Ya tenemos una BBDD con cinco Registros de
Usuarios. Desde Visual Studio hacemos Abrir Carpeta > Xampp > HTDocs > Nueva Carpeta, a la
que denominaremos Login. Creamos ahora un db.php, que contendrá las Credenciales de
nuestra BBDD, que consultamos desde el LocalHost. Hacemos Servidor > Cuentas Usuarios >
LocalHost (Todos Los Privilegios).
140. ESTILO DE LOGIN

141. CONECTANDO BBDD

142. DOCUMENTANDO LOGIN


25. VISTA DATOS WEB

143. INTRODUCCION

144. CREANDO BBDD

145. CREANDO MODELO HTML

146. ESTILOS DE TABLA

147. DOCUMENTANDO VISTA


26. REGISTRO CON MYSQL

148. INTRODUCCION

149. CREANDO BBDD

150. CREANDO ESTRUCTURA

151. ESTILOS DE REGISTRO

152. CONECTANDO BASE DE DATOS A FORMULARIO

153. DOCUMENTANDO REGISTRO


27. LOGIN Y REGISTRO CON MYSQL

154. INTRODUCCION

155. PROYECTO

156. ESTRUCTURA Y ESTILOS

157. REGISTROS MEDIANTE WEB

158. ESTRUCTURA LOGIN

159. ESTILO DE LOGIN

160. VALIDANDO DATOS WEB

161. DOCUMENTACION PRYECT

162. BONUS


28. DISEÑO ALMACEN EN WEB

163. INTRODUCCION

164. MODELO ENTIDAD RELACION

165. CREANDO BBDD

166. CREANDO INDEX

167. ESTILO DE INDEX

168. CREANDO PAGINA WEB DE INGRESO DE PRODUCTOS

169. ESTILO DE PAGINA WEB DE INGRESO DE PRODUCTOS

170. FORMULARIO INGRESO DE DATOS

171. CREANDO PAGINA WEB DE MUESTRA DE PRODUCTOS

172. PROYECTANDO DATOS EN TABLAS DESDE BASE DE DATOS EN HTML

173. CREANDO ARCHIVO PARA UN SOLO PRODUCTO


174. ESTILOS Y ACTUALIZACIONES

175. CREANDO REGISTRO DE USUARIOS

176. ESTILOS DE REGISTRO DE USUARIOS

177. ENLAZANDO FORMULARIO DE EMPLEADOS


29. DESPEDIDA

178. DESPEDIDA


30. BONUS

179. BONUS


GLOSARIO

Dato. Columna. Tabla. Sentencia. Clausula. Instrucción. Campo. Registro. Consulta. Indice.
Comando. Formulario. Segmentar. Función. Normalizar. Normalización. Formas Normales.
Primera Forma Normal. 1NF. Segunda Forma Normal. 2NF. Tercera Forma Normal. 3NF. Valor
Atómico. Dato Atómico. Atributo. Tabla Principal. Tabla Independiente. Dependencia.
Dependencia Parcial. Dependencia Transitiva. Optimización. Integridad. Entidad. Entidad
(Objeto). Atributo. Atributo (Columna). Relación. Clave Primaria. Primary Key. Clave Foránea.
Foreign Key. Modelo Entidad Relación. Cardinalidad. Registro. Store Procedure. Procedimiento
Almacenado. Trigger. Vista. Transacción. Encriptación. Rol. Roles. Privilegio. Privilegios.

CREATE. DATABASE. USE. TABLE. SELECT. FROM. INSERT. INTO. VALUES. WHERE.
DISTINCT. ORDER BY. ASC. DESC. AND. OR. NOT. IN. BETWEEN. LIKE. SUM. COUNT. MIN.
MAX. AVG. GROUP BY. UCASE. LCASE. CONCAT. ROUND. CHAR_LENGTH. CASE. ELSE.
WHEN. THEN. END. UPDATE. SET. ALTER TABLE. ADD. ADD COLUMN. DROP. DROP
COLUMN. NOT NULL. DATE. DATETIME. SCHEMA. NULL. AUTO_INCREMENT. ENGINE.
COMMENT. CHANGE. TRIGGER. BEFORE INSERT. AFTER INSERT. BEFORE UPDATE.
AFTER UPDATE. BEFORE DELETE. AFTER DELETE. ON UPDATE. ON DELETE. RESTRICT.
CASCADE. SET NULL. NO ACTION. DELIMITER. PROCEDURE. BEGIN. END. CALL. BEFORE.
AFTER. TRIGGER. FOR. FOR EACH. ROW. SIGNAL. MESSAGE_TEXT. SQLSTATE. VIEW.
AS. JOIN. ON. COMMIT. ROLLBACK. START TRANSACTION. IF. ROW_COUNT.
AES_ENCRYPT. AES_DECRYPT. COMPRESS. UNCOMPRESS. LENGTH. CONCAT.
CONCAT_WS. ADDDATE. INNER JOIN. ON.

INT. CHAR. VARCHAR. PRIMARY KEY. *. AS. < >. %.

--

HERRAMIENTAS

LUCIDCHART (Diagramas).

--

NOTAS

Objeto = Entidad = Tabla. Nombre. Característica = Atributo = Columna. Identificador = Primary


Key. Relación = Foreign Key.

También podría gustarte