
En esta clase explicamos como funciona una Arquitectura Servidor<>Cliente
Un Sistema de Gestión de Bases de Datos (SGBD) es un conjunto de programas que permiten el almacenamiento, modificación y extracción de la información en una base de datos, además de proporcionar herramientas para añadir, borrar, modificar y analizar los datos. Los usuarios pueden acceder a la información usando herramientas específicas de interrogación y de generación de informes, o bien mediante aplicaciones al efecto. Los SGBD también proporcionan métodos para mantener la integridad de los datos, para administrar el acceso de usuarios a los datos y recuperar la información si el sistema se corrompe. Permite presentar la información de la base de datos en variados formatos. La mayoría de los SGBD incluyen un generador de informes. También puede incluir un módulo gráfico que permita presentar la información con gráficos y tartas. Hay muchos tipos de SGBD distintos según manejen los datos y muchos tamaños distintos según funcionen sobre ordenadores personales y con poca memoria a grandes sistemas que funcionan en mainframes con sistemas de almacenamiento especiales. Generalmente se accede a los datos mediante lenguajes de interrogación, lenguajes de alto nivel que simpifican la tarea de construir las aplicaciones. También simplifican la interrogación y la presentación de la información. Un SGBD permite controlar el acceso a los datos, asegurar su integridad, gestionar el acceso concurrente a ellos, recuperar los datos tras un fallo del sistema y hacer copias de seguridad. Las Bases de Datos y los sistemas para su gestión son esenciales para cualquier área de negocio, y deben ser gestionados con esmero.
MySQL, el sistema de gestión de bases de datos SQL Open Source más popular, lo desarrolla, distribuye y soporta MySQL AB. MySQL AB es una compañía comercial, fundada por los desarrolladores de MySQL. Es una compañía Open Source de segunda generación que une los valores y metodología Open Source con un exitoso modelo de negocio. El sitio web MySQL (http://www.mysql.com/) proporciona la última información sobre MySQL y MySQL AB.
Una base de datos o banco de datos es un conjunto de datos pertenecientes a un mismo contexto y almacenados sistemáticamente para su posterior uso. En este sentido, una biblioteca puede considerarse una base de datos compuesta en su mayoría por documentos y textos impresos en papel e indexados para su consulta. Actualmente, y debido al desarrollo tecnológico de campos como la informática y la electrónica, la mayoría de las bases de datos están en formato digital (electrónico), y por ende se ha desarrollado y se ofrece un amplio rango de soluciones al problema del almacenamiento de datos. Existen programas denominados sistemas gestores de bases de datos, abreviado SGBD, que permiten almacenar y posteriormente acceder a los datos de forma rápida y estructurada. Las propiedades de estos SGBD, así como su utilización y administración, se estudian dentro del ámbito de la informática. Las aplicaciones más usuales son para la gestión de empresas e instituciones públicas. También son ampliamente utilizadas en entornos científicos con el objeto de almacenar la información experimental. Aunque las bases de datos pueden contener muchos tipos de datos, algunos de ellos se encuentran protegidos por las leyes de varios países.
Debe determinarse si la plataforma donde se desea hacer la instalación está soportada. Nótese que no todos los sistemas soportados son igualmente adecuados para ejecutar MySQL. En algunas plataformas el funcionamiento será mucho más robusto y eficiente que en otras. Debe elegirse la distribución que se instalará. Hay varias versiones de MySQL disponibles, y la mayoría lo están en varios formatos de distribución. Se puede elegir entre distribuciones prearmadas que contienen programas binarios (precompilados) o bien código fuente. En caso de duda, debe elegirse una distribución binaria. También se provee acceso público al código fuente para quienes deseen ver los desarrollos más recientes y colaborar en el testeo de código nuevo. Para establecer qué versión y tipo de distribución debería usarse.
En MySQL hay básicamente tres categorías distintas de tipos de datos: los datos numéricos, los datos de fechas y los de cadena.
La consulta de datos no siempre será realizada utilizando sólo una tabla como origen, sino que utilizaremos varias tablas con una relación común.
Las claves primaras ayudan a identificar un registro.
Las claves foráneas son utlizadas para la relación de una tabla con otra(s).
Las restricciones son necesarias para evitar por ejemplo duplicados o datos inexactos.
El uso de las vistas es altamente recomendado para evitar errores comunes en las consultas y acelerar las mismas.
El valor null consta de una gran importancia en las bases de datos. En esta clase discutimos sus usos.
En muchas situaciones deseamos no introducir todos los valores para todas las columnas, en vez de eso podemos utilizar valores por defecto para ahorrar tiempo.
Para consultar o manipular los datos de las bases de datos o sus objetos, utilizaremos el lenguaje SQL.
En esta clase haremos una pequeña introducción al lenguaje SQL y su sintaxis.
SELECT se usa para recibir registros seleccionados desde una o más tablas.
Las opciones ALL, DISTINCT, and DISTINCTROW especifican si deben retornarse los registros duplicados. Si no se da ninguna de estas opciones, por defecto es ALL (se retornan todos los registros coincidentes). DISTINCT y DISTINCTROW son sinónimos y especifican que los registros duplicados en el conjunto de resultados deben borrarse.
Las funciones facilitan nuestras operaciones.
Las funciones de agregación (resumen) como COUNT(), MIN(), y SUM() ignoran los valores NULL. La excepción a esto es COUNT(*), que cuenta filas y no valores de columna individuales.
Todas las funciones matemáticas retornan NULL en caso de error.
Para funciones que operan en posiciones de cadenas de caracteres, la primera posición es la 1.
Las funciones que esperan valores de fecha usualmente aceptan valores de fecha y hora e ignoran la parte de hora. Las funciones que esperan valores de hora usualmente aceptan valores de fecha y hora e ignoran la parte de fecha
Otras funciones de gran utilidad.
El operador WHERE es utilizado para filtrar los resultados de una consulta.
El operador IN es utilizado para realizar subconsultas.
El operador BETWEEN es utilizado para buscar un registro entre un rango, ya se fea un rango de fechas o números.
El operador LIKE es utilizado para búsquedas por patrones.
La condición IS NULL es utilizada para buscar por campos con el valor NULL.
El operador NOT es utilizado para hacer búsquedas inversas.
Para ordenar un resultado, se usa la cláusula ORDER BY.
Para limitar el número de resultados obtenidos, se usa la cláusula LIMIT.
Si usa una función de grupo en un comando sin la cláusula GROUP BY , es equivalente a agrupar todos los registros.
Una cláusula HAVING debe ir tras cualquier cláusula GROUP BY y antes de cualquier cláusula ORDER BY.
SELECT ... UNION [ALL | DISTINCT] SELECT ... [UNION [ALL | DISTINCT] SELECT ...]
UNION se usa para combinar el resultado de un número de comandos SELECT en un conjunto de resultados.
Cuando se combina (también se denomina join -unión, en inglés-) información desde múltiples tablas, se necesita indicar qué registro de una tabla se combinará con qué registro de la otra.
INNER JOIN y , (coma) son semánticamente equivalentes en la ausencia de una condición de JOIN: ambos producen un producto Cartesiano entre las tablas especificadas (esto es, cada registro en la primera tabla se junta con cada registro en la segunda tabla).
Algunos ejemplos de join:
mysql> SELECT * FROM table1,table2 WHERE table1.id=table2.id;
mysql> SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id;
mysql> SELECT * FROM table1 LEFT JOIN table2 USING (id);
mysql> SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id
-> LEFT JOIN table3 ON table2.id=table3.id;
Desafortunadamente MySQL nos soporta FULL JOIN.
Los "alias" ayudan a reducir el tamaño de las consultas y facilitar las mismas.
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification] ...
create_specification: [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options]
CREATE [TEMPORARY] TABLE [IF NOT EXISTS]tbl_name[(create_definition,...)] [table_options]select_statement
SHOW CREATE DATABASE db_name
SHOW CREATE TABLE tbl_name
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION (partition_name,...)] [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ]
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION (partition_name,...)] SET col_name={expr | DEFAULT}, ... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ]
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION (partition_name,...)] [(col_name,...)] SELECT ... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ]
InnoDB sigue el mismo procedimiento para inicializar el contador de auto incremento de una tabla recientemente creada.
Nótese que si durante un INSERT el usuario especifica un valor NULL o 0 para una columna AUTO_INCREMENT, InnoDB trata a la columna como si no se hubiera especificado un valor y genera un nuevo valor para ella.
Luego de que el contador de auto incremento ha sido inicializado, si un usuario inserta una fila que explícitamente indica para la columna auto incremental un valor mayor que el valor actual del contador, éste se establece al valor actual de la columna. Si no se indica un valor, InnoDB incrementa el valor del contador en uno y lo asigna a la columna.
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [PARTITION (partition_name,...)] [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
TRUNCATE [TABLE] tbl_name
ALTER {DATABASE | SCHEMA} [db_name] alter_specification ...
alter_specification:
[DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name
ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name [alter_specification [, alter_specification] ...] [partition_options]
• Se permiten hasta 64 índices por tabla (32 antes de MySQL 4.1.2). Cada índice puede consistir desde 1 hasta 16 columnas o partes de columnas. El máximo ancho de límite son 1000 bytes (500 antes de MySQL 4.1.2).
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { user | CURRENT_USER }] [SQL SECURITY { DEFINER | INVOKER }] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ... [RESTRICT | CASCADE]
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
Se permiten hasta 64 índices por tabla (32 antes de MySQL 4.1.2). Cada índice puede consistir desde 1 hasta 16 columnas o partes de columnas. El máximo ancho de límite son 1000 bytes (500 antes de MySQL 4.1.2).
Algunos motores de almacenamiento tienen opciones que controlan su comportamiento. Se puede crear un fichero my.cnf y establecer opciones de inicio para el motor que se planea utilizar. Si se van a usar motores de almacenamiento con soporte para tablas transaccionales (InnoDB, BDB), hay que asegurarse de que se han configurado según lo deseado antes de iniciar el servidor:
En esta clase se explica como se alojan los datos de la base de datos en el servidor.
Sumario de la estrategia de copias de seguridad
En caso de un fallo de sistema operativo o energía, InnoDB hace todo el trabajo de restauración de datos por si mismo. Pero para asegurarse de que puede dormir bien, tenga en cuenta los siguientes puntos:
• Ejecute siempre el servidor MySQL con la opción --log-bin, o mejor aún --log-bin=log_name, donde el archivo de registro está guardado en algún medio diferente al disco en donde está el directorio de datos. Si tiene un medio seguro tal, también puede ser bueno para hacer balanceo de carga de disco (que resulta en una mejora de rendimiento).
• Haga copias de seguridad completas periodicas, utilizando el último comando mysqldump dado previamente, que hace una copia de seguridad en línea sin bloqueo.
• Haga copias de seguridad incrementales periodicamente volcando los registros con FLUSH LOGS o mysqladmin flush-logs.
Si quiere hacer una copia de una tabla a un nivel SQL, puede utilizar SELECT INTO ... OUTFILE. Para SELECT INTO ... OUTFILE, el archivo de salida no debe existir previamente.
El comando LOAD DATA INFILE lee registros desde un fichero de texto a una tabla a muy alta velocidad. El nombre de fichero debe darse como una cadena literal.
CHECK TABLE tbl_name [, tbl_name] ... [option] ...
option = { FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED }
REPAIR [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM]
ANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ...
Información sobre los posibles permisos que podemos aplicar en MySQL.
CREATE USER user_specification [, user_specification] ... user_specification: user [ identified_option ] identified_option: { IDENTIFIED BY 'auth_string' | IDENTIFIED BY PASSWORD 'hash_string' }
GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level TO user_specification [, user_specification] ... [REQUIRE {NONE | <em><code>ssl_option</code></em> [[AND] <em><code>ssl_option</code></em>] ...}] [WITH {GRANT OPTION | <em><code>resource_option</code></em>} ...] object_type: { TABLE | FUNCTION | PROCEDURE } priv_level: { * | *.* | db_name.* | db_name.tbl_name | tbl_name | db_name.routine_name } user_specification: user [ auth_option ] auth_option: { IDENTIFIED BY 'auth_string' | IDENTIFIED BY PASSWORD 'hash_string' }
En esta clase explicamos el procedimiento para cambiar la contraseña de administrador en caso de perderla.
OPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ...
Cuando se inicia con la opción --log-slow-queries[=file_name], mysqld escribe un archivo de registro que contiene todos las sentencias SQL que llevaron más de long_query_time segundos para ejecutarse completamente. El tiempo para adquirir los bloqueos de tabla iniciales no se cuenta como tiempo de ejecución
{EXPLAIN | DESCRIBE | DESC} tbl_name [col_name | wild] {EXPLAIN | DESCRIBE | DESC} [explain_type] explainable_stmt
explainable_stmt: { SELECT statement | DELETE statement | INSERT statement | REPLACE statement | UPDATE statement }
shell> mysqladmin [options] command [command-arg] [command [command-arg]] ...
Más de tres horas y media de curso con explicaciones prácticas.
Curso para todos los niveles: desde personas que no han utilizado una base de datos anteriormente hasta personas con conocimiento que quieran repasar lo aprendido anteriormente.
Sólo es necesario tener acceso a un sistema con el servidor MySQL instalado (se puede instalar localmente). Alternativamente nos puedes enviar un mensaje y de forma gratuita le daremos acceso a servidor MySQL para practicar (con acceso web para que no tenga que instalar nada en su PC).
En este curso de SQL/MySQL explicaremos todo lo necesario para entender como funciona un gestor de base de datos, la arquitectura que hay detrás de un modelo de cliente-servidor y los objetos de la base de datos.
Posteriormente explicaremos el lenguaje SQL tanto para consultar, manipular datos y objetos.
Para finalizar hablaremos de MySQL y las herramientas que ofrece para optimizar las consultas, crear bases de datos y gestionar usuarios.
MySQL
Instalador de MySQL Community Server 8.0Información generalTipo de programaSistema de gestión de bases de datos relacionalesDesarrolladorOracle CorporationLanzamiento inicial1994LicenciaGPL o Uso comercialInformación técnicaProgramado enC, C++Plataformas admitidasMicrosoft WindowsVersionesÚltima versión estable8.0.29 (info) ( 26 de abril de 2022 (1 mes y 11 días))Archivos legiblesMySQL Table Definition FormatArchivos editablesMySQL Table Definition FormatEnlacesSitio web oficialRepositorio de códigoSeguimiento de errores[editar datos en Wikidata]
MySQL es un sistema de gestión de bases de datos relacional desarrollado bajo licencia dual: Licencia pública general/Licencia comercial por Oracle Corporation y está considerada como la base de datos de código abierto más popular del mundo,12 y una de las más populares en general junto a Oracle y Microsoft SQL Server, todo para entornos de desarrollo web.
MySQL fue inicialmente desarrollado por MySQL AB (empresa fundada por David Axmark, Allan Larsson y Michael Widenius). MySQL AB fue adquirida por Sun Microsystems en 2008, y ésta a su vez fue comprada por Oracle Corporation en 2010, la cual ya era dueña desde 2005 de Innobase Oy, empresa finlandesa desarrolladora del motor InnoDB para MySQL.
Al contrario de proyectos como Apache, donde el software es desarrollado por una comunidad pública y los derechos de autor del código están en poder del autor individual, MySQL es patrocinado por una empresa privada, que posee el copyright de la mayor parte del código. Esto es lo que posibilita el esquema de doble licenciamiento anteriormente mencionado. La base de datos se distribuye en varias versiones, una Community, distribuida bajo la Licencia pública general de GNU, versión 2, y varias versiones Enterprise, para aquellas empresas que quieran incorporarlo en productos privativos. Las versiones Enterprise incluyen productos o servicios adicionales tales como herramientas de monitorización y asistencia técnica oficial. En 2009 se creó un fork denominado MariaDB por algunos desarrolladores (incluido algunos desarrolladores originales de MySQL) descontentos con el modelo de desarrollo y el hecho de que una misma empresa controle a la vez los productos MySQL y Oracle Database.