1 Followers
26 Following
buttonwar8

buttonwar8

SPOILER ALERT!

Guía para aprender a emplear MySQL

El fundamento de nuestro universo digital es una acumulación de datos que aumenta sin cesar. Como consecuencia, los sistemas de gestión de bases de datos como MySQL son los elementos centrales de Internet y del mundo interconectado. Estos dejan procesar grandes cantidades de datos de forma electrónica, archivarlos con congruencia y guardarlos permanentemente. Para ello, los datos complejos se descomponen en cantidades manejables y, en función de las necesidades, se relacionan entre sí. En nuestro manual de MySQL para principiantes te presentamos los principios básicos de la gestión de bases de datos y te mostramos a través de ejemplos cómo puedes optimizar la gestión de los datos de tu proyecto web con MySQL.


¿Qué es MySQL?


MySQL se cuenta al lado de Oracle y Microsoft SQL Server entre los
sistemas de gestión de bases de datosrelacionales más populares a escala mundial (hallas un listado actual en). El software desarrollado en 1994 por la empresa MySQL AB cuenta hoy en día con el patrocinio de
Oracle Corporationy se comercializa bajo un
sistema de licencias dual.Asimismo, además de la edición Enterprise dueña, Oracle ofrece una versión de código abierto con una licencia GPL. 


Esta licencia dual ofrece a las empresas la posibilidad de desarrollar aplicaciones propias basándose en MySQL sin someterlas a la licencia de código abierto. En la comunidad open source, sin embargo, la absorción de MySQL por parte de Oracle es objeto de críticas.


MySQL está escrito en C y C++ y, además, está provisto de un
analizador sintáctico de SQLbasado en Yacc con un tokenizador (escáner léxico) propio. Asimismo, el sistema de gestión de bases de datos se resalta por su
amplio soporte de sistemas operativos.


La abreviatura SQL procede de “Structured Query Language”, un lenguaje de programación que sirve para gestionar estructuras de bases de datos. Entre las posibles operaciones se hallan la consulta, integración, actualización y eliminación de datos existentes.


MariaDB: una bifurcación de MySQL con potencial


En el ámbito del desarrollo web, la integración del proyecto MySQL en el catálogo de productos de Oracle es objeto de desconfianza y crítica debido, eminentemente, al incremento incesante de las diferencias entre la versión MySQL con licencia GPL y el producto Enterprise de pago. Las nuevas funciones del sistema de gestión de bases de datos son cada vez más frecuentes, si bien solo en la versión propietaria. Las
bases de datos de fallos no públicasy los tests insuficientes hacen suponer a la comunidad que, bajo las alas del software Oracle, el proyecto open source no goza de igualdad de condiciones, lo que desencadena un apoyo cada vez menor por parte de esta.


Ya en el año 2009, el equipo de desarrollo principal en torno a Michael “Monty” Widenius, inventor de la base de datos MySQL, le dio la espalda al popular sistema de bases de datos y puso en marcha
con MariaDB un fork de código abierto de MySQL.A finales de dos mil doce, distribuciones Linux como Fedora, OpenSUSE, Slackware y Arch Linux fueron las primeras en reemplazar MySQL por MariaDB como instalación estándar. Un enorme número de proyectos open source, de empresas de software y plataformas web conocidas siguieron el mismo ejemplo, entre ellas Mozilla Firefox, Ubuntu, Google, Red Hat Enterprise Linux, Web of Trust, Team Speak, la Fundación Wikimedia y XAMPP.  


Aún el día de hoy queda patente que, en comparación con la versión de MySQL de código abierto, MariaDB sigue desarrollándose. Por consiguiente, se puede suponer que el fork vaya a superar pronto a su proyecto madre.


En el sector del software se puede charlar de un fork como una rama de desarrollo que surge de la bifurcación de un proyecto (en su mayoría, de fuente abierta). Un fork se crea sobre el código fuente del proyecto madre y se desarrolla en un proyecto de seguimiento independiente.


Sistemas de bases de datos


Hoy en día, la gestión electrónica de datos tiene sitio primordialmente con
sistemas de bases de datos (SBS), que están formados por dos componentes, la propia
base de datos (BD)y el
sistema de gestión de la base de datos (SGBD):



  • El sistema de gestión de bases de datos:por
    SGBDse entiende todo aquel software que, como MySQL, sirve para administrar el sistema de bases de datos. Entre las tareas de este software de gestión se halla la estructuración de los datos conforme a un modelo de base de datos predefinido. Además, el
    SGBDcontrola los accesos de escritura y lectura, administra grandes cantidades de datos y accesos paralelos y se ocupa de que se cumplan las normas con respecto a la integridad de la información, así como a su protección y seguridad.

  • La base de datoses un conjunto de datos con contenidos relacionados, como, por poner un ejemplo, información de los clientes del servicio o bien datos de los Content Management System. Un
    SGBDpuede administrar varias bases de datos de manera simultánea.

El siguiente gráfico muestra una presentación esquemática de un Sistema de Bases de Datos:


Modelo relacional de bases de datos


Según su definición, MySQL es un SGBD relacional. Esto quiere decir que la totalidad de los datos que usa MySQL se guarda en tablas relacionadas entre sí a través de claves (keys).


Veamos cómo se puede ilustrar esto con un ejemplo fácil. A continuación aparecen las tablas
autoresy
obras:


Todas las tablas de una base de datos relacional están formadas por columnas y filas, y cada columna está diseñada para un
atributodeterminado. En la tabla
autoresse encuentran, por poner un ejemplo, los atributos
id, nombrey
apellido.Las filas de una tabla están designadas como
rowsy cada una de ellas contiene un conjunto de datos, el que viene identificado (numerado), por norma general, por medio de una
clave primaria. El género de atributo establecido como clave primaria se define en el momento de crear la tabla. El requisito es que la clave primaria posibilite una asignación inequívoca, de modo que esta solo puede usarse una vez en la columna. Para ello se recomienda una numeración en serie vía
ID.


La tabla
obraspresenta, además de la
clave primaria
id_obras,
id_autorescomo
clave foránea(foreign key). Esta crea una relación entre las dos tablas y enlaza los conjuntos de datos de una tabla con los de la otra. Cuando se establece una conexión entre 2 tablas de una base de datos relacional se puede hablar de un
join.Esta conexión podría celebrarse con la siguiente consulta a la base de datos: “carga todas las obras del autor John Ronald Reuel Tolkien con la data de la primera publicación”.


Tolkien ha sido clasificado en la tabla
autorescon la clave primaria
id_autores
1. Para preguntar todas y cada una de las obras de tal autor, este se presenta en la tabla
obrascomo clave foránea. De esta manera se piden todos y cada uno de los rows enlazados con el
id_autores1.


En la práctica, todas y cada una de las operaciones de bases de datos en MySQL se realizan con comandos SQL estandarizados como SELECT, INSERT, UPDATE y DELETE, mas hablaremos de ellos en capítulos posteriores de nuestro manual de MySQL.


Como es lógico, también se pueden guardar todos los datos referentes a los autores y a sus obras en una única tabla. Un almacenaje de datos de estas características implica que una base de datos contenga un sinnúmero de entradas redundantes, ya que, por servirnos de un ejemplo, los datos en las columnas
nombrey
apellidose detallan de forma individual para cada obra. Una redundancia de este tipo no solo supone una carga para la memoria, sino que también da sitio a que se tengan que efectuar actualizaciones en diversos puntos de la base de datos. De ahí que que cuando se trabaja con bases de datos relacionales se limite su contenido a un tema por tabla. Se habla, en un caso así, de una
normalizaciónde los datos.


El campo de aplicación principal de MySQL es el
almacenamiento de datos en el contexto de las páginas web dinámicas.La combinación de MySQL con el software de servidores web Apache y los lenguajes de script PHP o Perl se ha consolidado como estructura clásica de software en el desarrollo web. El stack web puede llevarse a cabo como LAMP (Linux), MAMP (macOS) o bien WAMP (Windows) con los sistemas operativos de servidores habituales.


Para los que empiezan a trabajar con MySQL pueden ser aconsejables los
entornos locales
XAMPPpara recabar las primeras experiencias con el sistema de gestión de bases de datos, el que se fundamenta en  MariaDB en la versión actual.


Instalación del sistema de gestión de bases de datos


A continuación, te presentamos algunos ejemplos prácticos para arrojar más luz sobre los fundamentos de MySQL. Nuestro tutorial para MySQL tiene como base el
entorno de prueba de XAMPPy los códigos de snippets y las capturas se centran en las operaciones de bases de datos que se llevan a cabo a través de
PHPcon ayuda de un
servidor Apache HTTPen un computador Windows. En vez de la clásica base de datos MySQL, en este caso, se aplica el fork MariaDB. Actualmente, ambos sistemas de gestión de bases de datos son tan compatibles que todas las operaciones son exactamente iguales. En el marco de un tutorial para principiantes es indiferente si se trabaja con MySQL o bien con MariaDB.


Para saber cómo puedes instalar un entorno de prueba de manera local en tu ordenador Windows, visita nuestro. Si quieres aprender a trabajar con bases de datos relacionales desde el principio lo aconsejable es que te centres de forma directa en MariaDB. Un entorno alternativo y gratis que se fundamenta en MySQL es.


También tienes la posibilidad de integrar un stack web personalizado. MySQL y MariaDB se pueden conjuntar, según sea preciso, con diferentes sistemas operativos, servidores web y lenguajes de scripts. Los
paquetes de descarga gratuitos y con licencia GPLestán disponibles en la páginay. Puedes conseguir instrucciones detalladas de instalación para diferentes plataformas en la
documentaciónen inglés dey.


Gestión de bases de datos con phpMyAdmin


Para la gestión de MySQL nos fundamentamos en la aplicación web libre
phpMyAdmin, contenido en el paquete de instalación de XAMPP, pero también se ofrece separadamente en la página web oficial del proyecto como


phpMyAdmin es considerado como el
software estándar para la administración de bases de datos MySQLen la WWW. La aplicación web escrita en PHP y JavaScript facilita las operaciones de bases de datos a través de
interfaces gráficas de usuario. De esta manera se pueden crear y administrar las tablas de la base de datos relacional cómodamente en el navegador de internet. En este sentido, no es preciso en principio conocer los pertinentes comandos SQL.


Iniciar phpMyAdmin


Si has instalado XAMPP,
inicia el sistema gestor de bases de datos
(MySQL o bien MariaDB)en el panel de control, de igual modo como se empiezan los otros componentes del stack. Para esto, utiliza el botón “Start” que hay bajo “Actions”. Para poder acceder a phpMyAdmin a través del navegador, es necesario que inicies el servidor web Apache. Los módulos activados aparecen resaltados en color verde en el
panel de control de XAMPP.También puedes conocer el estado actual de los módulos de XAMPP en forma de notificación por medio del cuadro de texto.


XAMPP fue desarrollado en el marco del proyecto de software Apache Friends como sistema compacto de pruebas para su empleo en ordenadores locales. El bulto de software no está concebido para poner a disposición servicios web en Internet. Como sistema productivo, XAMPP no es capaz para el ámbito de la seguridad debido a sus numerosas restricciones.


En el modo perfecto de prueba local, se puede acceder a la
interfaz web del software de administracióna través de
.


Siempre y cuando se haya definido una
contraseñapara la cuenta
rooten la instalación de MySQL
,será preciso introducirla en la pantalla de registro en phpMyAdmin. En caso de usar esta herramienta en un producto de alojamiento web, los datos de registro serán otorgados por el proveedor pertinente. En este caso, como usuario, no acostumbras a tener derechos de acceso raíz.


Una vez has iniciado sesión, phpMyAdmin muestra la
página de comienzo de la aplicación, la que deja efectuar los ajustes básicos para obtener el
conjunto de caracteres
(colación)de la conexión de MySQL o para escoger el
modo de visualizacióndeseado (idioma, diseño y tamaño de fuente). En la parte derecha aparece un resumen de los datos de referencia de tu servidor de base de datos, del software de servidor web utilizado, así como de la información sobre la versión actual de phpMyAdmin. La barra del menú está, del mismo modo que el resto de barras de menú de la aplicación, diseñada en forma de pestañas. Para elegir unas o bien otras, solo hay que hacer clic en
Databases,
SQL,
Status,
User accounts,
Export,
Import,
Settings,
Replication,
Variablesy
More.


En el extremo izquierdo de la interfaz de usuario aparece un
panel de navegaciónen el que se indican todas y cada una de las tablas en la base de datos a las que tienes acceso con phpMyAdmin. Bajo el logo del programa en la esquina superior izquierda, hay una función con la que puedes acceder tanto a la página de comienzo del software como a la documentación oficial. Además, también existe la posibilidad de configurar el panel de navegación y actualizar su vista.


A continuación empezaremos nuestro curso intensivo de MySQL para que puedas crear tu primera base de datos.


Crea tu base de datos


Para crear una base de datos con phpMyAdmin hay que escoger la pestaña “Databases” (bases de datos) en la barra del menú de la página de comienzo.


Introduce un
nombre para la base de datosen el campo de entrada bajo “Create database” (crear nueva base de datos) y selecciona un cotejamiento (collation). En este caso es recomendable la colación
utf8mb4_unicode_ci. Con ella notificamos al servidor de bases de datos sobre la codificación para los datos transmitidos o bien recibidos. Las variantes mb4 también autorizan signos exóticos como símbolos o emojis, que se escapan a los comandos básicos de Unicode (Basic Multilingual Plane) y, en consecuencia, resultan aconsejables.


Confirma la entrada haciendo click en “Create” (crear). La base de datos creada aparece en el panel de navegación en el lado izquierdo de la pantalla. Las nuevas bases de datos no incluyen ningún contenido. Para depositar datos es preciso que, a continuación, crees una tabla.


Crear tablas


Para crear una nueva tabla, escoge la base de datos deseada y navega por la barra de menú hasta llegar a la pestaña “Structure” (estructura).


Crea una tabla e introduce el nombre (por poner un ejemplo,
users) y el
número deseado de columnasmediante el botón “Create table” (generar tabla). Recuerda que a cada columna le corresponde un atributo de la entrada en la tabla. Si precisas incluir más columnas, lo puedes hacer más tarde.


Si, por servirnos de un ejemplo, deseas crear una base de datos de usuarios, puedes recurrir a los siguientes elementos para las columnas de la tabla:


Para la base de datos de usuarios, crea la tabla
userscon siete columnas y confirma la entrada con “Go”.


Una vez creada la tabla, phpMyAdmin te da la posibilidad de acotar los nombres de las columnas y de
realizar los ajustes de formato para los datos previstos.


La tabla que aparece a continuación incluye una descripción de la estructura de las tablas así como de los posibles ajustes.


Todas estas opciones entienden los ajustes más importantes de las columnas de las tablas. Si te mueves cara la derecha con ayuda de la barra de desplazamiento encontrarás otras opciones de configuración —no incluidas en este tutorial de MySQL para principiantes.


La siguiente tabla expone
diferentes géneros de datosque se pueden procesar tanto con MySQL como con MariaDB, así como su campo de valores y sus requisitos de almacenaje.


Para la tabla de ejemplo
usersse han configurado los siguientes ajustes:


Los posibles valores para la columna
idse definen como
números enteros(íntegro, INT) y llevan el atributo
UNSIGNED. El
idsolo puede adoptar valores numéricos positivos. En “Index” hemos seleccionado el ajuste
PRIMARYpara
id. A este respecto, el número de identificación hace de
clave primariapara la tabla
usersy la marca de verificación en “
A_I” (
Auto_Increment) señala al sistema gestor de bases de datos que los identificadores de cada entrada tienen que generarse como números consecutivos.


Los valores para las columnas
forename,
surname,
emaily
passwordse definen como un género de datos
VARCHAR. Se trata, en este caso, de cadenas de caracteres variables cuya longitud (M) está limitada a cincuenta caracteres mediante la opción “
Length/Value”.Para la columna
emailse activa el índice
UNIQUE.De este modo se asegura que cada dirección de correo electrónico de la tabla se guarde una única vez.  


Para las columnas
created_aty
updated_athemos elegido el género de datos
TIMESTAMP. El sistema de gestión de bases de datos guarda datos temporales para crear y actualizar las entradas en formato
YYYY-MM-DD HH:MM:DD.Puesto que el sistema debe generar automáticamente una
marca temporalpara cada entrada, escogemos el valor estándar
CURRENT_TIMESTAMPpara la columna
created_at.La columna
updated_atadquiere importancia cuando se actualiza una entrada. En este sentido, dejamos los
valores Nullpara esta columna y se establece
NULLcomo valor estándar.


En PHP, el valor
NULLrepresenta una entrada vacía, por lo que un campo tiene el valor
NULLcuando no se le haya asignado ningún valor.


Como
motor de almacenamientose emplea el formato estándar de tabla de MySQL conocido como
InnoDB.


phpMyAdmin traduce todos y cada uno de los ajustes que se pueden realizar a una tabla en código SQL y, si es necesario, este puede visualizarse, en “
Vista anterior de SQL”.


En el capítulo sobre las consultas a las bases de datos te ofrecemos una descripción detallada sobre la sintaxis de SQL.


Los ajustes pueden guardarse haciendo clic en “Save” (guardar). La tabla
usersse muestra en el panel de navegación de la base de datos bajo la opción
test.


Administrar tablas


Para poder dirigir una tabla ya creada, haz click en el nombre de la tabla en el panel de navegación. A continuación, phpMyAdmin te muestra una visión general de los datos guardados en la tabla correspondiente en la pestaña “Browse” (visualizar). En el caso de la tabla del ejemplo, la consulta no produce ningún resultado porque aún no contiene datos.


La barra del menú cuenta con diferentes pestañas para
gestionar las tablas de datos. Si quieres modificar la estructura de una tabla de datos, haz click en la etiqueta “Structure”; para añadir datos selecciona la opción “Insert” (añadir). phpMyAdmin también deja buscar en las tablas, administrar derechos y exportar conjuntos de datos o importarlos de otras tablas.


Corregir la estructura de la tabla


Si deseas corregir tu tabla más tarde para incluir columnas adicionales, eliminar las que existen o bien repasarlas, ve a la pestaña “Structure”.



Puedes añadir columnas con la opción“Add columns”, a través de la que puedes indicar el número deseado de columnas nuevas y la posición de exactamente las mismas.


En el siguiento gráfico se añade una nueva columna por medio de
updated_at:


Si deseas
< agencia de marketing digital en madrid ya existentes, selecciónalas marcando la casilla correspondiente y haz click en “Drop”.


La
edición de una columnase hace a través del botón “Change”. A través de este se te redirige a una vista de edición que se semeja a la que se emplea para la creación de tablas:


En algunas circunstancias, los cambios efectuados en la estructura de las tablas pueden conllevar una pérdida de información. De ahí que, antes de editar o suprimir las tablas anteriormente creadas es recomendable que hagas una: haz click en la pestaña “Export” (exportar), elige el formato de datos deseado para el backup y confirma el cambio mediante la opción “Go”. A continuación, se abre una ventana de diálogo en la que el navegador web te solicita el destino de almacenamiento para la descarga. El programa gratuito
es una opción alternativa a la creación de copias de respaldo de bases de datos con phpMyAdmin.


Crear entradas de tabla


Para introducir los datos en una tabla vía phpMyAdmin se puede recurrir a dos opciones: o se importan conjuntos de datos de un fichero externo (por poner un ejemplo, de una copia de seguridad) o se crean las entradas en la tabla manualmente. Escoge la tabla de ejemplo
usersy ve a la pestaña “Insert” (insertar).


phpMyAdmin te enseña la próxima
máscara de entrada de datos:


En el apartado “Column” aparece una lista de las columnas que se han definido para la tabla
users,y “Type” alberga información sobre el género de datos que se espera, así como el número máximo de caracteres entre paréntesis. Omitimos “Function” y pasamos directamente a “Value”, apartado en el que se definen los valores de cada una de las columnas de la tabla del ejemplo.


En el capítulo anterior se ha configurado la tabla
usersde tal forma que el sistema de gestión de bases de datos provea automáticamente de contenido a los campos de las columnas
id,
created_aty
updated_at.En la columna
idse da un número de identificación a cada entrada a través de
AUTO_INCREMENT.Al campo
created_atse le asigna de manera automática la data actual y a
updated_atel sistema le entrega el valor estándar
NULL. Sin embargo, se deben introducir los datos de forma manual para las columnas
forename,
surname,
emaily
password,tal y como se ve a continuación con datos de usuario ficticios:


  • forename:
    John
  • surname:
    Doe
  • email:

  • password:
    qwertz

Pinchando en “Go” los datos se trasfieren a la tabla. phpMyAdmin brinca automáticamente a la pestaña “SQL” y resume las
operaciones efectuadas en la base de datos en una sentenciasegún la sintaxis de SQL:


En principio, todas y cada una de las operaciones que se hacen en phpMyAdmin a través de una interfaz gráfica de usuario también pueden escribirse en SQL, lo que forma parte del procedimiento habitual en el marco del desarrollo web.


Las llamadas
consultas SQL(SQL queries) se encuentran en el código fuente de todas y cada una de las aplicaciones web dinámicas y dejan que el servidor web interactúe con la base de datos. El lenguaje de bases de datos SQL se fundamenta en comandos y permite, por servirnos de un ejemplo, consultar y emplear datos en el marco del funcionamiento del programa. En el próximo capítulo del presente manual de MySQL te presentamos los comandos SQL más importantes, como por servirnos de un ejemplo
SELECT,
INSERT,
DELETEy
UPDATE,y te ofrecemos información sobre la sintaxis de las operaciones de bases de datos básicas.


Pero primero introducimos datos de usuario adicionales en la tabla
usersy echamos un vistazo a la tabla resultante en la pestaña “Browse”:


Con un click sobre el
nombre de una columnase puede organizar la tabla en el orden que se desee.


Establecer la conexión con la base de datos


Tras haber introducido las entradas en la tabla de ejemplo
users, en los próximos capítulos mostramos cómo se pueden pedir estos
datos vía PHP a través del servidor web Apache.


Para ello, el paso inicial consiste en crear la
conexión con la base de datos. En PHP se puede recurrir a 3 interfaces: MySQL Extension, MySQL Improved Extension () y PHP Data Objects ().



  • MySQL Extension:la extensión MySQL consiste en una interfaz de MySQL el día de hoy obsoleta que fue muy popular en su momento. Frente a MySQLi y PDO, esta versión tiene la desventaja de que no soporta ni sentencias preparadas ni parámetros con nombre.


  • MySQLi:MySQLi es una versión mejorada de la clásica extensión de PHP para acceder a las bases de datos MySQL. La interfaz trabaja de una forma procedimental, mas también está orientada a objetos. Sin embargo, su utilización es algo limitada en las bases de datos MySQL y Maria DB.


  • PDO:los PHP Data Objects (PDO) son interfaces orientadas a objetos que dispone una capa de abstracción para acceder a los datos. Así, los PDO no solo dejan la integración de bases de datos MySQL en PHP, sino también de otros sistemas de bases de datos como, Oracle, MSSQL o SQLite.

A partir de aquí nos concentramos en las
conexiones de bases de datos vía PDO.


Para poder hacer solicitudes a una base de datos con un script de PHP, la base de datos se debe autentificar en primer lugar. Con la próxima línea de código se crea una conexión con la base de datos a través de un PDO:


Se recomienda integrarla al principio de cada script que contenga operaciones de bases de datos.


Se utiliza la palabra clave de PHP
newpara crear una instancia de la clase base de PDO, cuyo constructor espera 3 parámetros: el
Data Source Name (DSN),un nombre de usuario y la contraseña para la base de datos, si la hubiese. En este caso, el DSN está formado por los próximos parámetros:



  • controlador PDO para bases de datos:
    mysql

  • servidor de la base de datos (
    host=):

    localhost

  • nombre de la base de datos (
    dbname=):

    test

  • colación (
    charset=):

    utf8

Si todavía no has definido los datos de acceso para tu base de datos, usa el nombre de usuario
rooty una contraseña vacía:


La conexión con la base de datos se almacena en la variable
dólares americanos pdo. Esto permite remitir a ella posteriormente en el script.


Una vez creada la conexión con la base de datos, se le pueden realizar distintas consultas a medida que se marcha escribiendo el código en el script. Cuando se finaliza, también se interrumpe la conexión de la base de datos.


Realizar consultas con SELECT, INSERT, UPDATE y DELETE


Para extraer información de un banco de datos es preciso recurrir al
lenguaje de bases de datos SQL, que se fundamenta semánticamente en el inglés y tiene un mantenimiento sencillo. Su sintaxis es, en gran medida, autoexplicativa.


En SQL se trabaja con sentencias, que también se conocen como consultas o bien preguntas.


Una consulta SELECT fácil está formada, por poner un ejemplo, por los próximos componentes:


Primero se define el comando de SQL
SELECTy a continuación las columnas y tablas correspondientes a las que hace referencia el comando. Se utiliza un punto y coma para cerrar la sentencia.


Asimismo, tienes la posibilidad de ampliar la sentencia para una
condición opcionalo para una
función de clasificación o de agrupación:


En este sentido se aplica la convención de que, para facilitar la lectura, los comandos de SQL se escriben en mayúscula y los nombres de las bases de datos, de las tablas y de los campos en minúscula. SQL es esencialmente un
lenguaje sin formatoy no hace distinciones entre mayúsculas y minúsculas.


En caso de que recurras a nombres de tabla y de columna que se correspondan con palabras clave de SQL predefinidas (no recomendable), estos deben ir
entre comillas simples (' '
).


A continuación, ilustramos la sintaxis de sentencias SQL sencillas con ejemplos de los comandos
SELECT,
INSERT,
UPDATEy
DELETE.


SELECT


Se usa el
comando
SELECT
para consultar series de datos (
rows) de un número determinado de tablas. Si se quieren mostrar en el navegador tanto el nombre y los apellidos como las direcciones de correo electrónico de todos los usuarios en la tabla de ejemplo creada con anterioridad, debes crear en el directorio
htdocsde tu ambiente de XAMPP un nuevo fichero PHP
text.phpe incluir el siguiente script:


Este ejemplo de código se lee de la próxima manera: primeramente se comienza el script con la etiqueta de comienzo de PHP
<?php.En la segunda línea se establece la conexión con la base de datos
testen
localhosty se guarda en la variable
dólares americanos pdo.La sentencia SQL con el comando
SELECTse halla en la línea tres. En este punto se señala al sistema de gestión de bases de datos que consulte las columnas
forename,
surnamey
emailde la tabla
users.Esta sentencia se guarda en la variable
$ sql.


Las líneas de la cuatro a la 7 muestran el constructor

foreach,
que deja la iteración sobre arrays, lo que quiere decir que una estructura de datos se repasa de forma gradual. Tanto los arrays que se quieren iterar como el modo en que se deben guardar los datos consultados se definen en comillas detrás del constructor
foreach:


La variable
dólares americanos pdose comunica con la base de datos deseada a través de la conexión definida en la línea dos. Con la función
query()y mandamos al banco de datos la sentencia SQL guardada en la variable
$ sql.


El servidor web solicita las columnas
forename,
surnamee
emailde la tabla
usersde la base de datos
testy recorre
todas y cada una de las filasde la tabla en el marco del constructor
foreach. La palabra clave de PHP
asen la variable
$ rowdefine dónde se deben guardar los datos seleccionados.


En la primera ronda del constructor
foreach,el array tendría el siguiente aspecto:


Una parte del bucle
foreachen nuestro ejemplo es la reproducción como texto a cada vuelta del bucle vía
echo. Aquí, se repasa cada línea de la tabla, se leen los datos depositados para las columnas definidas en la sentencia SQL y se emiten a través del navegador de internet.


Si se deben leer todas y cada una de las columnas de una tabla de datos, se debe utilizar el asterisco (
*) como
espaciadoren la secuencia SQL.


Con ello se tiene la posibilidad de usar todos y cada uno de los datos incluidos en
usersen el marco del script. En el siguiente screenshot se complementa el texto con la
fecharelativa a la creación de la entrada:


En los 2 ejemplos anteriores, el servidor web emite datos de usuario en el orden en el que se han introducido en la tabla
users(conforme al identificador). Si deseas producir los datos en otro orden, defínelo con ayuda de la palabra clave de SQL
ORDER BY.En el siguiente ejemplo se ofrecen los datos en orden alfabético según el nombre:


INSERT


Rara vez se crean manualmente con phpMyAdmin las entradas de una base de datos. Por lo general, es el servidor web es el que escribe los datos durante la ejecución del script, como ocurre, por ejemplo, en el momento en que un usuario de Internet cumplimenta un formulario on line en una página web o deja un comentario en una tienda en línea. En ambos casos se usa el
comando de SQL

INSERT
en un segundo plano

.


Las sentencias SQL con el comando
INSERTse crean siguiendo el siguiente esquema:


Esto se lee de la próxima manera: abre la tabla pertinente y también introduce los valores 1, 2 y 3 en las columnas 1, dos y tres.


Un script PHP sencillo con el que se pueda añadir otra entrada en la tabla de ejemplo
userspuede tener la próxima apariencia:


En primer lugar se crea la conexión con la base de datos y se guarda en la variable
dólares americanos pdo.A continuación, se define la sentencia SQL y se guarda en la variable
$ sql.En la línea cinco se utiliza el operador flecha (
->) para acceder a la variable
dólares americanos pdoy, con ayuda de la función
exec(),ejecutar la sentencia SQL guardada en
dólares americanos sql.


Para asegurar que el script introduzca a un conjunto de caracteres en la tabla
users,es preciso revisar el número de las filas implicadas con ayuda de la
condición
if.
Esta se ocupa de que el string
New record created successfullysolo se emita a través del navegador web cuando la cantidad de conjuntos de datos incluidos sea 1. Si el script vuelve a ejecutarse, el aviso no aparecerá. Las entradas dobles se evitan definiendo como UNIQUE al valor
email.


Al acceder a la vista general de la tabla de ejemplo
usersen la base de datos
testse puede observar que la tabla se ha ampliado con la entrada 5. El número de identificación y la fecha se añaden de forma automática según lo previsto.


UPDATE


Para actualizar conjuntos de datos ya existentes, se puede recurrir al
comando SQL

UPDATE
tal y como se muestra en el próximo ejemplo:


Esta sentencia SQL tiene el siguiente significado: elige la tabla indicada y sustituye el valor en la columna1 por el valor1 y el valor en la columna2 por el valor2 siempre y cuando la columna3 tenga el valor3. Si te olvidas de incluir la condición, MySQL sobreescribe estos campos en todos y cada uno de los conjuntos de datos.


En este caso trabajamos con una sentencia SQL que vincula una operación a una
condición. Si trasladamos esto a la tabla de nuestro ejemplo, la dirección de correo electrónico del usuario John Doe se actualiza por medio del siguiente script de PHP:


En la sentencia SQL definimos que el valor actual en la columna
emailtenga que ser reemplazado por el valor
siempre y cuando el valor en la columna contenga el
id1. Por lo tanto, se actualiza el conjunto de datos con la clave primaria 1. Además, también se debe actualizar en la misma sentencia SQL el valor para la columna
updated_atcon ayuda de la función de MySQL
now(),que devuelve la data actual. A continuación, se ejecuta la sentencia como anteriormente con la línea de código
$ pdo->exec($ sql)en el contexto de una condición if.


Si la actualización se ha llevado a cabo con éxito, phpMyAdmin debería apuntar en la etiqueta “Browse” que la tabla está actualizada:


En el ejemplo, hemos actualizado una dirección de correo electrónico y hemos reemplazado el valor estándar
NULLen la columna
updated_atpor el registro de fecha y hora. El comando
UPDATEpermite también transferir
valores de una columna a otra. Esta operación puede emplearse cuando se amplía la tabla
usersdel ejemplo para la columna
email_registration,lo que ofrece la posibilidad de diferenciar entre dos direcciones de correo electrónico: una usada a lo largo del proceso de registro y otra de contacto actual que se puede alterar con el tiempo. Al principio, no obstante, ambas direcciones son iguales, de tal modo que se pueden trasferir los valores de un campo a otro. Para ello creamos la columna nueva
email_registrationcon phpMyAdmin utilizando “Add columns” en la pestaña “Structure”:


Para transferir los valores se usa la sentencia
UPDATEsiguiente:


Debido a que se quieren actualizar todos y cada uno de los registros, no hace falta elaborar ninguna condición para la actualización.


Si se ejecuta el script en el servidor web, el sistema gestor de bases de datos transfiere los valores de la columna
emailpara todos y cada uno de los conjuntos de datos a la columna
email_registration.


DELETE


Las entradas se pueden quitar con el
comando SQL

DELETE
, que se emplea siguiendo el esquema que te presentamos a continuación:


Si trabajas con identificadores en tu base de datos, es adecuado identificar con ellos las entradas que vas a borrar. Si, por poner un ejemplo, deseas suprimir la entrada cinco en la tabla del ejemplo, debes proceder de la siguiente manera:


El comando SQL
DELETEelimina siempre y en toda circunstancia una fila entera. Si deseas suprimir valores en columnas determinadas de una base de datos, puedes recurrir a la sentencia
UPDATE. Con
UPDATE
tabla SET columna
= NULL WHERE se le puede asignar el valor
NULLa una columna, pero siempre y cuando se haya autorizado dicho valor para la columna pertinente.


Sentencias preparadas


Con PDO se pueden efectuar operaciones de bases de datos en calidad de
sentencias preparadas(prepared statements). En la actualidad, estas “consultas prefabricadas” son una práctica frecuente en el desarrollo web y están respaldadas, sobre todo, por todos y cada uno de los sistemas de gestión de bases de datos modernos.  


  • En los ejemplos expuestos con anterioridad hemos transferido de manera directa valores de parámetro a la sentencia SQL. Los prepared statements, por el contrario, trabajan con marcadores que solo posteriormente se llenan con valores. Esto vuelve posible que el SGBD pueda revisar la
    validez de los parámetrosantes de emplearlos. Las sentencias preparadas ofrecen, siempre y cuando estas se incluyan en el texto fuente, una protección eficaz contra la
    inyección SQL. En este patrón de ataque, los piratas informáticos crean o bien modifican comandos SQL para acceder a información sensible, transferir datos o aportar los comandos en un sistema.

La inyección SQL se fundamenta en un conocido fallo de seguridad en el
entorno de las bases de datos SQL:si se entregan datos de usuario, por poner un ejemplo, vía
$ _GETcon parámetros estáticos, esto permite a los atacantes enriquecer el input con metacaracteres que pueden conducir a efectos indeseados en caso de que estos alcancen al intérprete de SQL sin enmascaramiento. Este método de infiltración puede prevenirse con efectividad a través de consultas parametrizadas. En este sentido, los prepared statements hacen las veces de plantillas para los comandos SQL que se transmiten a la base de datos separados de los verdaderos parámetros. Esta valida los datos entregados, disfraza los metacaracteres automáticamente e inserta los parámetros en vez de los marcadores en la secuencia SQL. 


Las sentencias preparadas ofrecen, además de seguridad, una
ventaja en lo que se refiere a rendimiento. Esta se hace visible cuando el mismo comando SQL se tiene que ejecutar en bucle con diferentes parámetros. Tras ser analizado sintácticamente, la sentencia preparada se introduce en el sistema de base de datos y debe ejecutarse con nuevos parámetros. Así, las consultas complejas pueden agilizarse de forma considerable.


En PDO, los prepared statements pueden ejecutarse con ayuda de la función
prepare(). Esta prepara una sentencia para la ejecución y devuelve un objeto de secuencia. Como marcador para los valores correspondientes se utiliza o el símbolo de interrogación (
?) o un
parámetro con nombre (
named parameter)
.


Sentencias preparadas con parámetros sin nombre


El siguiente ejemplo de código muestra la operación INSERT como sentencia preparada con
parámetros sin nombre:


Inicialmente se produce un objeto sentencia de la consulta deseada con ayuda de la función
prepare()y se guarda en el array
dólares americanos statement. En vez de valores de parámetro específicos, se utiliza el signo de interrogación como marcador.


Si una sentencia SQL solo contiene marcadores, los valores entregados por separado en el código se deben vincular a la sentencia. En PHP se emplea para esto la función
bindParam().Utilizamos el operador flecha (
->) para acceder al método
bindParam()del objeto
$ statementy asignarle variables (1 hace referencia al primer signo de interrogación, dos al segundo, etc.).


Ahora, la plantilla SQL resultante puede ejecutarse tan frecuentemente como se quiere con los parámetros deseados. En el ejemplo actual se definen los valores de las variables para dos registros. La ejecución de las sentencias SQL prefabricadas tiene lugar para cada entrada mediante
execute().


Sentencias preparadas con parámetros con nombre


Los
parámetros con nombreresultan algo más claros que los marcadores con el signo de interrogación. Se trata, en un caso así, de marcadores personalizados designados, según las necesidades, por el próximo esquema:


Los parámetros con nombre no pueden contener espacios en blanco o bien guiones, por lo que en su lugar se tiene que emplear el guion bajo (
_).


El siguiente ejemplo muestra la operación
INSERTcomo sentencia preparada con parámetros con nombre:


En la sentencia preparada se encuentran los parámetros con nombre
:forename,
:surname,
:emaily
:password. Estos se vinculan a las variables
$ forename,
dólares americanos surname, $ emaily
$ passwordpor medio de
bindParam(). En el ejemplo actual hemos designado tanto los parámetros como las variables en correspondencia con los nombres de las columnas de la tabla del ejemplo, puesto que no es la sintaxis la que lo predetermina. Sí se recomienda utilliar una
denominación coherentea favor de un código fuente inteligible. Tanto la asignación de los valores de las variables como la ejecución de la sentencia SQL se realiza de forma análoga al ejemplo precedente.


Funciones de data y hora en MySQL


MySQL y MariaDB soportan diferentes funciones para trabajar con información sobre la fecha y la hora.  Puedes consultar aquí la. En nuestro tutorial de MySQL para principiantes te presentamos ciertas de .


Un posible escenario de aplicación para las funciones de data y hora son, por ejemplo, las consultas a las bases de datos en las que se deben leer todos y cada uno de los conjuntos de datos
creados en un día determinado.


El siguiente script emite todos y cada uno de los registros de la tabla
usersdel ejemplo creados hoy:


Para mostrar solamente las entradas de hoy se usa la siguiente condición en la sentencia SQL:


En primer sitio, se extrae la fecha de la marca temporal guardada en la columna
created_atcon ayuda de la función
DATE()y se equipara en el siguiente paso con la data actual. El comando
SELECTsolo elige las entradas cuya marca temporal coincida con la data actual. 


Como alternativa puedes escoger la entrada actualizada el 17.05.2017, a cuyo efecto hay que amoldar la condición de la sentencia SQL:


En este caso se compara la data de referencia con una específica. Asimismo, se pueden limitar las consultas a un año, mes o día ciertos.


La siguiente sentencia hace referencia a todas y cada una de las entradas de la tabla
userscreadas en mayo:


Además de los signos de igualdad, SQL también aguanta los siguientes operadores de comparación en las condiciones:


Asimismo, también se pueden vincular varias condiciones con operadores lógicos:


La siguiente sentencia permite, por ejemplo, seleccionar todas y cada una de las entradas creadas después de febrero y antes de abril:


Hasta ahora se han guardado los datos relativos a la fecha y hora en nuestra base de datos en el formato previamente indicado. Con MySQL y MariaDB estos no están establecidos. La función
DATE_FORMAT()ofrece la posibilidad de
ajustar la data y la hora con parámetros opcionales.


La tabla que aparece a continuación muestra posibles parámetros para la función
DATE_FORMAT(),tal y como aparece detallado en la documentación.


Mensajes de fallo en MySQL


Si un script no se ejecuta como estaba previsto, se pueden presentar fallos sintácticos en el código fuente o surgir tablas con nombres, columnas o variables incorrectos. El servidor de bases de datos no emite automáticamente estos mensajes de error, sino que, con frecuencia, el resultado deseado no se manifiesta sin hacer referencia alguna a la operación fallida.


Con
errorInfo(),PDO ofrece una función con la que se pueden recobrar otros
datos sobre fallos en la última operación realizadaen la base de datos, por ejemplo, para emitirlos a través del navegador web.


En el próximo
script de actualización de la dirección de correo electrónicose emplea la función
errorInfo()combinada con el constructor
if. La condición es la correcta ejecución de la sentencia SQL. Si esta se hace como debe ser, el servidor web emite el string
Update successful.De lo contrario, se ejecuta el código detallado en
else.


En el ejemplo, se informa al usuario de que se ha producido un error en SQL y se emite tanto la sentencia SQL pertinente como información adicional sobre fallos por medio de
errorInfo():


Si el script se ejecuta a través del servidor web, se obtiene la siguiente información:


El comando SQL
UPDATEhace referencia a una tabla con el nombre
user.La tabla de nuestro ejemplo se llama
users.El servidor SQL no es capaz de localizar la tabla pedida y ofrece el mensaje
Table 'test.user' doesn't exist.El motivo del fallo ha sido un error tipográfico en la sentencia SQL que se corrige con facilidad.


En cuanto a los valores de retorno de la función
errorInfo(),se puede hablar de un array con 3 elementos:


[0] = código de fallo SQL


[1] = código de fallo específico del controlador


[2] = mensaje de fallo específico del controlador


La información a la que se accede a través de
errorInfo()puede definirse indicando los elementos deseados entre corchetes.


En la práctica, no es muy común que el navegador de internet entregue información detallada sobre los errores, puesto que no valen de nada a los usuarios. Al contrario, los atacantes potenciales pueden utilizar estos mensajes de fallo para continuar a las consultas SQL y hallar las debilidades de las aplicaciones. Por esto, es conveniente que la información general dada a los usuarios acerca de los fallos sea muy general y que la
información referente a exactamente los mismos se almacene
de forma interna.


Esto podría lograrse como se muestra a continuación:


En lugar de producir el valor de retorno de la función
errorInfo()a través de
echoen el navegador, se guarda así como la marca temporal actual, la senda del fichero y la sentencia SQL en la variable
$ error.


La
función
PHP

DATE()
ofrece la marca temporal de Unix en el formato concretado. La llamada incesante mágica
__FILE__entrega la ruta completa para el archivo
test.php. Solicitamos la sentencia SQL actual al igual que en el ejemplo anterior vía
$ statement->queryString. Por último, se guardan los datos guardados en
dólares americanos errorcon ayuda de la función
file_put_contents()como texto en el archivo
sqlerrors.logen la carpeta
htdocs.


JOIN


Como ya se ha citado en el capítulo sobre las bases de datos relacionales, se pueden consultar datos de diferentes bases de datos simultáneamente. Si ya estás familiarizado con las operaciones básicas de bases de datos, volveremos a recurrir a ellas para demostrar cómo se pueden vincular las diferentes tablas de tu base de datos en un join (en español, unión o conexión).


La combinación de las tablas de una consulta tiene lugar con ayuda del comando SQL
JOIN. Aquí se vinculan dos o bien más
tablas normalizadaspor medio de columnas enlazadas, lo que se puede llevar a cabo a través de una clave foránea.


A continuación, te demostramos cómo se enlazan las tablas de bases de datos con el siguiente ejemplo:


La tabla muestra una selección de ciertas canciones más conocidas de los años sesenta y puede servir como
ejemplo negativo de un mal diseño de bases de datos


A primera vista llama la atención el hecho de que la tabla muestre gran cantidad de datos redundantes. Estos se eliminan y  distribuyen en el marco de la normalización en tablas separadas y se combinan entre sí con ayuda de claves foráneas.


Formas normales


Un buen diseño de bases de datos se distingue por tener un
mínimo de redundancia.Sin embargo, deben evitarse las entradas dobles a través de la normalización de las tablas de datos. En el marco del modelo de bases de datos relacional se han establecido tres
formas normales complementariasque establecen reglas fijas para una estructuración de datos óptima.


Primera forma normal


Una tabla se corresponde con la primera forma normal cuando todos los valores de los atributos son atómicos. Se comprende por valores de atributo atómicos aquellos que solo
contienen información, lo que se puede observar claramente en nuestro ejemplo negativo.


Observemos, por servirnos de un ejemplo, las columnas
album_titlee
interpretde la tabla
album.En lugar de incluir cada dato de la tabla en una columna diferente, lo hemos hecho más fácil y hemos introducido datos relativos al año de publicación del álbum, así como de la existencia de la banda entre paréntesis detrás del título del álbum o bien de los datos del intérprete. Este descuido se hace evidente cuando, por poner un ejemplo, se quieren preguntar todos y cada uno de los títulos publicados en un año determinado.


En este caso, es conveniente crear tablas de datos siguiendo las reglas de la primera forma normal. En la tabla de nuestro ejemplo esto tendría el siguiente aspecto:


Los datos aparecen separados y pueden leerse sin inconvenientes. Asimismo, la tabla prosigue conteniendo redundancias, como antes. Sigue leyendo y te explicaremos cómo puedes eliminarlas.


Segunda forma normal


Una tabla está en segunda forma normal cuando se cumplen todas y cada una de las condiciones de la primera forma normal y cada atributo que no forme parte de la totalidad de la clave primaria de la tabla es independiente funcionalmente.


A menudo, hay tablas de datos que poseen una columna que funciona como clave primaria. Las tablas de este género se corresponden automáticamente con la segunda forma normal si se cumplen las condiciones de la primera forma normal. En ocasiones puede ocurrir que la clave primaria de una tabla aparezca en 2 columnas, tal como ocurre en la tabla del ejemplo.


Para conseguir el título deseado de la columna
titlede la tabla
titlese necesita, por una parte, el
album_idy por otro el número del título en la columna
track. Se puede obtener el título
Sympathy for the Devil,por ejemplo, a través de la clave primaria
album_ID = tres AND track = 1,por lo que en un caso así se puede charlar de una clave primaria compuesta. Esta es necesaria para las consultas referidas a la columna
title. Las columnas
album_title, released, interprety
years_activedependen de
album_id.Sin embargo, para estas columnas no hay ninguna dependencia funcional respecto a la totalidad de las claves primarias. No se cumplen, por consiguiente, las condiciones de la segunda forma normal.


Esto puede modificarse poniendo la columna
titleen una tabla nueva y vinculándola mediante una clave foránea (
album_id) con la tabla de salida:


La tabla
albumrevisada solo contiene una
clave primariay cumple automáticamente las condiciones de la segunda forma normal. La nueva tabla
titlecontiene la columna sin clave
title, que es, a nivel funcional, absolutamente dependiente de las dos unas partes de la clave primaria (
album_idy
track)y se corresponde, así, con la segunda forma normal.


En la segunda forma normal, la tabla de datos
albumtambién contiene entradas redundantes.


Tercera forma normal


Si una tabla se corresponde con la tercera forma normal, deben cumplirse todas y cada una de las condiciones de la segunda forma normal y de la primera forma normal. Además, se debe comprobar que ningún atributo no clave dependa de forma transitiva de un atributo clave. Puede que esta condición parezca muy complicada, mas se puede explicar en pocas palabras: se da una
dependencia transitivasiempre que un atributo no clave dependa de otro atributo no clave.


Precisamente esto es lo que se aplica a la tabla
albumdel ejemplo. Aquí se encuentran las columnas
interprety
years_active. Al tiempo que se puede identificar al intérprete a través de
album_id,el año de formación de la banda depende tanto de los intérpretes como, a nivel transitivo, del
album_id.Esto tiene como desventaja que toda vez que se añada un álbum nuevo a un intérprete que ya se ha mencionado, el sistema de gestión de bases de datos guarda automáticamente un valor redundante en la columna
years_active. 


Para cumplir las condiciones de la tercera forma normal y suprimir todas y cada una de las redundancias de nuestra tabla, se deben incluir las columnas
interprety
years_activeen una tabla separada y vincularlas con la tabla de salida
albummediante la clave foránea
(interpret_id).


Así, se consiguen tres tablas normalizadas:
interpret,
albumy
title.


Si se quiere trasmitir un título determinado en nuestra base de datos, además de la información sobre el álbum y el intérprete, estas han de estar combinadas entre sí en tres
tablas separadas con ayuda del comando JOIN y de la clave foránea correspondiente.


Definición de claves foráneas a través de phpMyAdmin


Si escoges el
motor de bases de datos
InnoDB, puedes acotar cómodamente relaciones de claves foráneas a través de la interfaz gráfica del software de administración phpMyAdmin. Además, la clave primaria de una tabla puede emplearse como clave foránea en otras muchas tablas.


En nuestro ejemplo se requieren 2 conexiones para enlazar las 3 tablas normalizadas
album,
interprety
title:


  • Para la primera conexión se emplea la clave primaria
    album_idde la tabla
    albumcomo clave foránea en la tabla
    title.

  • Para la segunda conexión se emplea la clave primaria
    interpret_idde la tabla
    interpretcomo clave foránea en la tabla
    album.

Las
relaciones de las claves foráneaspueden contemplarse en el próximo gráfico:


A la hora de establecer el vínculo entre las tablas de datos una columna que marcha como clave foránea debe contener los atributos
UNIQUEo
INDEX.


La
relación entre las
claves primarias y las foráneasse corresponde, generalmente, con la relación del tipo 1:n. Cada campo de datos en la columna clave primaria de la tabla A está relacionado con múltiples campos de datos (n) en la columna clave foránea de la tabla B. Cada campo de datos en la columna clave foránea de la tabla B hace referencia a un campo de datos de la columna clave primaria de la tabla A. Como un ejemplo, en la columna de clave primaria
album_idde la tabla
albumhay cuatro entradas vinculadas a través de la clave foránea
title.album_idcon las 8 entradas de la tabla
title.


Para establecer las
relaciones deseadas, creamos las tablas
album,
interprety
titleen phpMyAdmin y definimos nuestras claves primarias en el marco de la creación de la tabla como ya se ha indicado a través de la opción “Index”. Es recomendable tener en consideración aquí el hecho de que las columnas que funcionarán posteriormente como claves foráneas se tienen que marcar como
INDEXo
UNIQUEmediante la opción Index. Para las relaciones 1:n solo es apto
INDEX, pues los valores en el campo
UNIQUEno deben repetirse.


A continuación se definen las
claves foráneas. Para esto, regresa a la tabla
albumdel ejemplo. Elige la tabla en el panel de navegación y haz clic en la pestaña
Structureen la barra de menú, que contiene el botón “Relation view” (vista de la relación):


Las relaciones de claves foráneas se definen en la vista de relaciones de las tablas de datos por medio del campo de entrada “
Foreign key constraints”:


En la tabla
album,la columna
interpret_iddebe funcionar como clave foránea, que se basa en la clave primaria
interpret_idde la tabla
interpret.


Por lo tanto, se debe elegir la columna
interpret_idcomo clave foránea en el menú desplegable bajo “Column”. Ten en cuenta que aquí solo se especifican columnas marcadas como
INDEX,
UNIQUEo
PRIMARY.En el campo de entrada triple “Foreign key constraint (InnoDB)” se debe precisar en qué clave primaria, de qué tabla y en qué base de datos debe fundamentarse la clave foránea. Para esto, efectúa la siguiente selección:


base de datos:
test


tabla:
interpret


clave primaria:
interpret_id


El campo “Constraint name” puede quedarse vacío, aunque el sistema de gestión de bases de datos le da un nombre automáticamente. Sin embargo, debe definirse el modo perfecto en que se comporta una tabla con claves foráneas cuando la clave primaria subyacente para la clave foránea se modifique o bien se suprima.


Si, por ejemplo, se elimina un intérprete de la tabla padre
interpret, también desaparece la clave primaria relacionada con dicha entrada. Se trata, por tanto, de determinar lo que debe pasar con las entradas relacionadas con esta entrada a través de una clave foránea, lo que en nuestro ejemplo se refiere a los álbumes de un intérprete.


Para determinar el comportamiento de una tabla con claves foráneas en caso de que se den las opciones
UPDATEo
DELETE, tanto en MySQL como en MariaDB se puede recurrir a 4 opciones.



  • RESTRICT:la opción RESTRICT impide la modificación de la tabla padre toda vez que existan otras tablas que remitan a esta. En el ejemplo que presentamos en nuestro tutorial para aprender a usar MySQL, no se puede quitar un conjunto de datos en la tabla
    interpretsi hay conjuntos de datos en la tabla
    albumque estén ligados a esta.


  • CASCADE:la opción CASCADE se ocupa de que se transmita el cambio realizado en la tabla padre al resto de tablas que referencian a dicha tabla padre. Si, por poner un ejemplo, cambiamos el
    interpret_iddel intérprete
    The Rolling Stonesde dos a ocho, a través de la opción de clave foránea CASCADE este cambio se aplicará a todas las tablas. Si se elimina una entrada en la tabla padre, esto da lugar, además, a que todos y cada uno de los conjuntos de datos vinculados se eliminen de las otras tablas. Es conveniente prestar atención al hecho de que la eliminación de una única entrada puede acarrear la desaparición de numerosos conjuntos de datos.


  • SET NULL:si seleccionas la opción SET NULL, se le asignará NULL al valor en la columna de clave foránea cuando se modifique o bien suprima la clave primaria en la tabla padre. 


  • NO ACTION:en MySQL, la opción NO ACTION equivale a la opción RESTRICT.

Una vez definida la opción deseada para la relación de claves foráneas, haz clic en “Save” para confirmar la entrada. El sistema de gestión de bases de datos otorga un nombre de forma automática a la nueva relación.


Tipos de JOIN en MySQL y MariaDB


Las relaciones de claves foráneas te dejan acceder a los datos de diferentes tablas con una única sentencia SQL. Para esto, puedes recurrir a cuatro tipos de
JOINen MySQL y MariaDB:



  • INNER JOIN: con
    INNER JOIN, el sistema de bases de datos busca entradas comunes en tablas enlazadas con JOIN. Solo se leen los conjuntos de datos que guardan coincidencias entre sí, es decir, en los que los valores de las columnas enlazadas (de clave primaria y clave foránea) de ambas tablas coinciden.


  • OUTER JOIN: con
    OUTER JOINse pueden establecer diferencias entre tablas de datos situadas a la izquierda o a la derecha. A diferencia de
    INNER JOIN,no solo se leen los conjuntos de datos que coinciden entre sí en las dos tablas, sino también todos los conjuntos de datos restantes de las tablas de la derecha y de la izquierda.


  • LEFT JOIN:se leen todos y cada uno de los conjuntos de datos de la tabla izquierda y de la derecha en los que se hallan coincidencias.


  • RIGHT JOIN:se leen todos y cada uno de los conjuntos de datos de la tabla derecha y de la izquierda en los que se hallan coincidencias.

En este tutorial de MySQL nos centramos en
INNER JOIN.


La sintaxis de INNER JOIN prosigue el próximo esquema:


El comando
SELECTcombinado con el marcador
*indica al sistema de gestión de bases de datos que lea los valores de todas las columnas para los que son de aplicación la condiciones de las cláusulas ON y WHERE.


Puesto que en este caso se habla de
INNER JOIN, diseño de web rapido extraen de la base de datos los conjuntos de datos en los que existan coincidencias entre la clave foránea de la
tabla1y la clave primaria de la
tabla2. Además, se puede delimitar una
función de filtro opcionalcon ayuda de la cláusula
WHERE.


Te aclaramos esto a continuación con un caso basado en nuestras tablas normalizadas
album,
interprety
title:


El script del ejemplo muestra una operación
INNER JOINen la que la tabla
albumestá relacionada con la tabla
interprety se escogen los conjuntos de datos en los que se da una coincidencia entre la clave primaria y la foránea.


Nuestra base de datos recoge todos los conjuntos de datos (un
LEFTo
RIGHT JOINtendría el mismo resultado). A continuación se producen los valores leídos con ayuda de un bucle
foreachy de la construcción del lenguaje
echoen el navegador.


En el marco de una sentencia SQL, se extraen los datos del intérprete de la tabla
interprety los relativos al título del álbum y al año de publicación del disco que aparecen en la tabla
album.


La decisión de los conjuntos de datos del join que deben visualizarse viene delimitada con una condición en la
cláusula

WHERE
. Si, por ejemplo, se quiere acceder a los álbumes publicados en el año 1968, se puede proceder de la próxima manera:


Mediante la condición
WHERE released = 1968se limita dicha emisión en el navegador a un solo álbum.
Beggars Banquetde los
Rolling Stoneses el único álbum en nuestra todavía base de datos abarcable que se publicó en el año mil novecientos sesenta y ocho.


Con ayuda del comando
JOINse pueden unir varias tablas en una red de datos. En el ejemplo siguiente se combina la tabla
albumen un INNER JOIN con las tablas
interprety
titlepara arrojar información completa sobre los títulos musicales almacenados en la base de datos.


De ser preciso, es posible definir una cláusula
WHEREcon una función de filtrado. Un ejemplo de ello es si se quiere producir información sobre la pista 7 del álbum “Abbey Road”.


Es aconsejable prestar atención al hecho de que en la tabla
titlenos enfrentamos a una
clave primaria múltiple. Si se quiere hacer referencia a un título determinado, además del número de la pista, se precisa el
album_idque aparece en la tabla junto al título del álbum.


Desde apasionados hasta profesionales


Este manual de MySQL para principiantes está concebido como un curso intensivo que explica los
fundamentos sobre los sistemas de bases de datos basados en SQLy presenta ejemplos de interés práctico de fáciles operaciones de bases de datos. Si la información expuesta sobre las posibilidades de la aplicación objeto de la presente guía es de tu interés, también puedes preguntar la documentación enlazada en el capítulo introductorio sobre los sistemas de gestión de bases de datos MySQL y MariaDB. Asimismo, Internet también cobija gran cantidad de páginas web que ofrecen tutoriales y ejemplos de uso sobre el popular sistema de gestión de bases de datos.


Es recomendable, también, visitar la plataforma on-line, en la que una extensa comunidad de usuarios formada por más de seis con cinco millones de desarrolladores intercambian información y hablan de los inconvenientes relativos al desarrollo del software. La Digital Guide de IONOS, también, contiene muchos otros artículos sobre bases de datos, a los que puedes acceder haciendo click sobre las etiquetas que aparecen más abajo.




  • ¿Te ha gustado el artículo? 4.8




¿Te ha gustado el artículo? 4.8