Cliente-Servidor en SQL con Ejemplos Sencillos

 

Cliente-Servidor en SQL con Ejemplos Sencillos

1. Conceptos Básicos

Cliente-Servidor en Bases de Datos

  • Servidor: Programa que gestiona la base de datos (MySQL, PostgreSQL, etc.)

  • Cliente: Aplicación que solicita datos al servidor (consola SQL, aplicación web, etc.)

  • Comunicación: Usan protocolos como TCP/IP


2. Ejemplo 1: Conexión Cliente-Servidor Básica

Configuración del servidor (Ejemplo con MySQL):

sql

-- En el servidor MySQL creamos una base de datos

CREATE DATABASE tienda;

USE tienda;


-- Creamos una tabla simple

CREATE TABLE productos (

    id INT PRIMARY KEY,

    nombre VARCHAR(50),

    precio DECIMAL(10,2)

);


-- Insertamos datos

INSERT INTO productos VALUES 

(1, 'Laptop', 799.99),

(2, 'Mouse', 19.99),

(3, 'Teclado', 49.99);


Conexión desde el cliente (simulación):

sql

-- Desde el cliente nos conectamos al servidor

-- mysql -h localhost -u usuario -p tienda


-- Una vez conectados, consultamos datos

SELECT * FROM productos;

Resultado:

text

+----+---------+--------+

| id | nombre  | precio |

+----+---------+--------+

| 1  | Laptop  | 799.99 |

| 2  | Mouse   | 19.99  |

| 3  | Teclado | 49.99  |

+----+---------+--------+


3. Ejemplo 2: Cliente Ejecutando Operaciones CRUD

sql

-- Cliente solicita INSERTAR un nuevo producto

INSERT INTO productos (id, nombre, precio) 

VALUES (4, 'Monitor', 199.99);


-- Cliente ACTUALIZA un registro

UPDATE productos 

SET precio = 24.99 

WHERE id = 2;


-- Cliente ELIMINA un registro

DELETE FROM productos 

WHERE id = 3;


-- Cliente CONSULTA los resultados

SELECT * FROM productos 

ORDER BY precio DESC;

Resultado final en servidor:

text

+----+---------+--------+

| id | nombre  | precio |

+----+---------+--------+

| 1  | Laptop  | 799.99 |

| 4  | Monitor | 199.99 |

| 2  | Mouse   | 24.99  |

+----+---------+--------+


4. Ejemplo 3: Múltiples Clientes Conectados

Simulamos dos clientes trabajando simultáneamente:

Cliente 1:

sql

-- Inicia una transacción

START TRANSACTION;


SELECT * FROM productos 

WHERE id = 1;

-- Ve: Laptop, 799.99

Cliente 2 (simultáneo):

sql

UPDATE productos 

SET precio = 749.99 

WHERE id = 1;

-- Éxito: 1 fila actualizada

Cliente 1 continúa:

sql

-- Ve los datos originales (aislamiento)

SELECT * FROM productos 

WHERE id = 1;

-- Todavía ve: Laptop, 799.99


COMMIT;

-- Al confirmar, ahora ve el precio actualizado


5. Ejemplo 4: Permisos y Seguridad Cliente-Servidor

Desde el servidor (administrador):

sql

-- Creamos usuario para cliente específico

CREATE USER 'cliente_app'@'localhost' 

IDENTIFIED BY 'password123';


-- Damos permisos limitados

GRANT SELECT, INSERT ON tienda.productos 

TO 'cliente_app'@'localhost';


-- Denegamos permisos de eliminación

REVOKE DELETE ON tienda.productos 

FROM 'cliente_app'@'localhost';

Desde el cliente con permisos limitados:

sql

-- Esto funciona:

INSERT INTO productos VALUES (5, 'Tablet', 299.99);


-- Esto NO funcionará (permiso denegado):

DELETE FROM productos WHERE id = 1;

-- Error: Access denied


6. Ejemplo Práctico: Sistema de Pedidos

En el servidor:

sql

CREATE TABLE pedidos (

    id INT PRIMARY KEY AUTO_INCREMENT,

    cliente_id INT,

    producto_id INT,

    cantidad INT,

    fecha DATE

);

Desde diferentes clientes:

Cliente Web (frontend):

sql

-- Inserta nuevo pedido

INSERT INTO pedidos (cliente_id, producto_id, cantidad, fecha)

VALUES (101, 4, 2, CURDATE());

Cliente Móvil (app):

sql

-- Consulta pedidos del cliente

SELECT p.nombre, pd.cantidad, pd.fecha

FROM pedidos pd

JOIN productos p ON pd.producto_id = p.id

WHERE pd.cliente_id = 101;

Cliente Reportes (backoffice):

sql

-- Genera reporte consolidado

SELECT 

    p.nombre,

    SUM(pd.cantidad) as total_vendido,

    SUM(pd.cantidad * p.precio) as valor_total

FROM pedidos pd

JOIN productos p ON pd.producto_id = p.id

GROUP BY p.nombre;


7. Diagrama Sencillo Cliente-Servidor

text

┌─────────────┐      SQL Queries     ┌─────────────┐

│             │  ──────────────────> │             │

│   CLIENTE   │                      │   SERVIDOR  │

│   (MySQL    │  <────────────────── │   (Base de  │

│   Workbench,│     Result Sets      │   Datos     │

│   Aplicación)│                     │   MySQL)    │

└─────────────┘                      └─────────────┘


8. Ejercicio Práctico

Configura este mini-proyecto:

  1. En el servidor:

sql

CREATE DATABASE biblioteca;

USE biblioteca;


CREATE TABLE libros (

    id INT PRIMARY KEY AUTO_INCREMENT,

    titulo VARCHAR(100),

    autor VARCHAR(100),

    disponible BOOLEAN DEFAULT true

);


INSERT INTO libros (titulo, autor) VALUES

('El Quijote', 'Miguel de Cervantes'),

('Cien años de soledad', 'Gabriel García Márquez');

  1. Desde el cliente 1:

sql

-- Prestar un libro

UPDATE libros 

SET disponible = false 

WHERE id = 1;

  1. Desde el cliente 2:

sql

-- Ver qué libros están disponibles

SELECT * FROM libros 

WHERE disponible = true;


9. Consejos Clave

  1. Conexión: Siempre cierra conexiones del cliente cuando termines

  2. Seguridad: Nunca expongas el servidor directamente a internet

  3. Performance: Usa índices en tablas grandes

  4. Backups: Programa backups automáticos en el servidor

  5. Monitoreo: Revisa logs del servidor periódicamente


10. Recursos para Practicar

  1. Servidores gratuitos: MySQL Community Edition, PostgreSQL

  2. Clientes: MySQL Workbench, DBeaver, pgAdmin

  3. Práctica local: XAMPP (incluye MySQL y phpMyAdmin)

  4. Online: SQLFiddle, DB Fiddle para pruebas rápidas


¡Recuerda! El modelo cliente-servidor permite que múltiples aplicaciones (clientes) accedan de manera controlada y segura a los datos centralizados en el servidor de base de datos.


Comentarios

Entradas más populares de este blog

1-3-¿Qué es SQL?

6-8-Proyecto del Día 1

5-7. MySQL y MySQL Workbench