🎃 Grandes descuentos en libros en línea, eformaciones y vídeos*. Código CALABAZA30. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. PHP y MySQL
  3. Introducción a MySQL
Extrait - PHP y MySQL Domine el desarrollo de un sitio web dinámico e interactivo (5ª edición)
Extractos del libro
PHP y MySQL Domine el desarrollo de un sitio web dinámico e interactivo (5ª edición) Volver a la página de compra del libro

Introducción a MySQL

Introducción a las bases de datos relacionales

1. Conceptos

Una base de datos es un conjunto de datos estructurados que corresponden normalmente a un ámbito funcional (facturación, recursos humanos, etc.). Físicamente, una base de datos se corresponde con un cierto número de archivos almacenados en un dispositivo de almacenamiento.

Los datos de una base de datos son gestionados por un programa llamado sistema de gestión de base de datos (SGBD). Este programa ofrece diferentes características: acceso a los datos, gestión de las actualizaciones, mejora de la integridad, control de la seguridad de acceso, etc.

Una base de datos relacional presenta una organización de los datos basada en el modelo relacional, desarrollado en 1970 por Edgar Frank Codd. Es la estructura más extendida actualmente.

En una base de datos relacional, los datos se organizan en tablas enlazadas de manera lógica. Una tabla incluye columnas (o campos) que describen una fila (o registro). La relación entre las tablas se establece mediante una columna.

Ejemplo

libro 
+----+--------------------------------+---------------+ 
| id | titulo                         | id_coleccion  | 
+----+--------------------------------+---------------+ 
|  1 | PHP 7.0 - Desarrollo web       |             1 | 
|  2 | Oracle 12c - Administración    |             1 | 
|  3 | Oracle 12c - Recovery Manager  |             2 | 
|  4 | BusinessObjects XI             |             1 | ...

Trabajar con MySQL

1. Administración del servidor MySQL

Después de instalar MySQL, podemos administrar el servidor MySQL con la cuenta de superusuario root (nada que ver con la cuenta root en Unix o Linux).

Inicialmente, dependiendo de cómo se instale MySQL, la cuenta root tiene o no una contraseña; esta cuenta dispone de todos los privilegios sobre todas las bases de datos del servidor MySQL. En cambio, solo puede conectarse localmente (a partir del mismo servidor).

En el capítulo Construir una base de datos en MySQL, veremos cómo crear otros usuarios y asignarles privilegios.

2. Interfaz de la línea de comandos

La aplicación cliente mysql es un programa interactivo que permite conectarse a un servidor MySQL y ejecutar consultas en dicho servidor. Esta aplicación se encuentra en el directorio bin de su instalación MySQL.

Sintaxis

mysql [-h host] [-u usuario] [-p[contraseña]] [nombre_base] 

-hhost

Host al que debe conectarse (equipo local predeterminado).

-uusuario

Nombre de usuario para la conexión (nombre del usuario actual del sistema operativo de manera predeterminada).

-p[contraseña]

Contraseña para la conexión (ninguna contraseña predeterminada). Si no se introduce en la línea de comandos, se solicitará de manera interactiva, como cualquier contraseña. Si se especifica la contraseña en la línea de comandos (lo que no se recomienda por razones de seguridad), no debe haber ningún espacio tras la opción -p.

nombre_base

Base seleccionada de entrada (ninguna predeterminada).

Ejemplo

[root@athena ~]# mysql -u root 
Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 6 
Server version: 8.0.16 MySQL Community Server (GPL) 
 
Copyright (c) 2000, 2019, Oracle and/or its affiliates.  
 
Oracle is a registered trademark of Oracle Corporation and/or its 
affiliates. Other names may be trademarks of their respective owners. 
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input 
statement. 
 
mysql> 

En este ejemplo, la conexión se realiza localmente, sin contraseña, como usuario root. Como el usuario actual es root en el sistema operativo, puede obtenerse el mismo resultado escribiendo simplemente el comando mysql:

[root@athena ~]# mysql 
Welcome...

Instalar nuestra base de datos de demostración

En este capítulo, trabajaremos con una base de datos llamada eni.

Esta base de datos ENI puede crearse mediante el siguiente script crear-base-eni.sql:

-- Creación de la base de datos. 
DROP DATABASE IF EXISTS eni ; 
CREATE DATABASE eni; 
USE eni; 
  
-- Creación de la tabla TEMA. 
CREATE TABLE tema 
  ( 
  id INT PRIMARY KEY AUTO_INCREMENT, 
  titulo VARCHAR(20) NOT NULL, 
  id_primario INT 
  ); 
INSERT INTO tema 
  (id,titulo,id_primario) 
VALUES 
  (1,'Base de datos',NULL), 
  (2,'Programación',NULL), 
  (3,'Internet',NULL), 
  (4,'Open Source',NULL) 
; 
INSERT INTO tema 
  (titulo,id_primario) 
VALUES  
  ('MySQL',1),  
  ('Oracle',1),  
  ('Lenguajes',2),  
  ('Método',2),  
  ('HTML - XML',3),  
  ('Diseño web',3),  
  ('Seguridad',3),  
  ('Sistema',4),  
  ('Lenguajes',4), 
  ('Base de datos',4) 
; 
 
-- Creación de la tabla COLECCIÓN. 
CREATE TABLE coleccion  
  ( 
  id INT PRIMARY KEY AUTO_INCREMENT, 
  nombre VARCHAR(25) NOT NULL UNIQUE, 
  precio_siniva DECIMAL(5,2) DEFAULT 20, 
  gastos_siniva DECIMAL(5,2) 
  ); 
INSERT INTO coleccion 
  (nombre,precio_siniva,gastos_siniva) 
VALUES 
  ('Recursos Informáticos',28.48,1.14), 
  ('Open IT',5.69,NULL), 
  ('Prácticas técnicas',25.71,1.02), 
  ('Pack técnico',54.19,2.16) 
  ('Epsilon',51.43,2.05) 
;  
  
-- Creación de la tabla AUTOR. 
CREATE TABLE autor 
  (  
  id INT PRIMARY KEY AUTO_INCREMENT, 
  apellidos VARCHAR(40) NOT NULL, 
  nombre VARCHAR(40) NOT NULL, 
  mail VARCHAR(200), 
  tel_oficina...

Aprender las bases del lenguaje SQL

1. Tipos de datos

MySQL ofrece varios tipos de datos para la definición de las columnas de las tablas. En el capítulo Construir una base de datos en MySQL, veremos cómo utilizar estos tipos de datos en las sentencias para la creación de tablas.

a. Tipos de cadena de caracteres

MySQL ofrece los siguientes tipos para las cadenas de caracteres:

CHAR[(n)] [BINARY]

Cadena de longitud fija, de n caracteres (n entre 0 y 255, 1 de manera predeterminada). Cuando se almacena, la cadena se completa a la derecha con espacios hasta la longitud definida; estos espacios son automáticamente eliminados cuando la cadena se lee.

VARCHAR[(n)] [BINARY]

Cadena de longitud variable, de n caracteres como máximo (n entre 0 y 65535, 1 de manera predeterminada). Cuando se almacena, no se añade ningún espacio. Nótese que si la cadena contiene espacios a la derecha, estos no se eliminan cuando la cadena se lee.

TINYTEXT [BINARY]

Cadena de longitud variable hasta 255 caracteres, equivalente a VARCHAR(255).

TEXT [BINARY]

Cadena de longitud variable hasta 216-1 caracteres.

MEDIUMTEXT [BINARY]

Cadena de longitud variable hasta 224-1 caracteres.

LONGTEXT [BINARY]

Cadena de longitud variable hasta 232-1 caracteres.

ENUM(’valor’[,...])

Enumeración. Cadena cuyo valor debe pertenecer a una lista de valores (o ser NULL). Una enumeración puede contener 65.535 valores distintos como máximo.

SET(’valor’[,...])

Conjunto. Cadena que puede contener cero, uno o varios valores entre una lista de valores. Un conjunto puede contener 64 valores distintos como máximo.

De manera predeterminada, las cadenas de caracteres no tienen en cuenta las minúsculas/mayúsculas (’A’ es igual a ’a’). La palabra BINARY, en la definición del tipo, permite tener una cadena «binaria» que tenga en cuenta las minúsculas/mayúsculas.

Los tipos de datos ENUM y SET no tienen en cuenta las minúsculas/mayúsculas.

b. Tipos numéricos

Los tipos numéricos principales que ofrece MySQL son los siguientes:

TINYINT[(m)]

Entero positivo o negativo en 8 bits (de -128 a +127).

SMALLINT[(m)]

Entero positivo o negativo en 16 bits (de -32768 a +32767).

SMALLINT[(m)] UNSIGNED

Entero positivo en 16 bits (de 0 a 65535).

MEDIUMINT[(m)]

Entero positivo o negativo en 24 bits (de -223 a +223-1).

MEDIUMINT[(m)]...

Ejecutar consultas SQL simples

1. El modo SQL del servidor

El servidor MySQL puede funcionar según diferentes modos SQL. El modo SQL define qué sintaxis SQL puede utilizarse y qué verificaciones debe hacer el servidor, sobre todo durante actualizaciones.

El modo SQL utilizado en el inicio viene definido por el valor de la opción sql-mode (en la línea de comandos de MySQL o en el archivo de configuración).

Se puede modificar el modo SQL tras el inicio gracias a la variable de sistema sql_mode. El modo SQL puede modificarse a nivel global o a nivel de sesión (cada conexión puede utilizar un modo diferente que se adapte a sus necesidades).

El modo SQL está definido por una lista de palabras clave separadas por comas.

El modo predeterminado ha evolucionado mucho desde la versión 5.6.6.

Antes de la versión 5.6.6, el servidor MySQL evitaba generar errores durante actualizaciones y no dudaba a la hora de modificar valores para permitir su asignación a una columna: se mostraba una simple alerta.

Desde la version 5.6.6, los siguientes modos se han añadido sucesivamente de manera predeterminada:

Versión

Modos añadidos

Significado

5.6.6

NO_ENGINE_SUBSTITUTION

Se produce un error si se crea una tabla con un motor que no está disponible. 

5.7.5

ONLY_FULL_GROUP_BY

Se produce un error en una consulta GROUP BY si las cláusulas SELECT, HAVING u ORDER BY, hacen referencia a columnas sin función de agregación que no figuren en la cláusula GROUP BY o que no dependan de manera única de las columnas presentes en la cláusula GROUP BY.

STRICT_TRANS_TABLES

Modo SQL «strict» para los motores de almacenamiento transaccionales, así como para los motores de almacenamiento no transaccionales cuando sea posible (el modo STRICT_ALL_TABLES se puede usar explícitamente para este tipo de motores). A grandes líneas, con este modo, los valores inválidos se rechazan y se genera un error.

5.7.7

NO_AUTO_CREATE_USER

No se puede crear un usuario  con una sentencia SQL GRANT.

5.7.8

ERROR_FOR_DIVISION_BY_ZERO

Asociado al modo «strict», este modo genera un error si se encuentra una división por cero en una actualización (INSERT o UPDATE). En una sentencia de lectura (SELECT), con este modo, una división por cero devuelve NULL y genera una alerta.

NO_ZERO_IN_DATE...