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:
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');
Desde el cliente 1:
sql
-- Prestar un libro
UPDATE libros
SET disponible = false
WHERE id = 1;
Desde el cliente 2:
sql
-- Ver qué libros están disponibles
SELECT * FROM libros
WHERE disponible = true;
9. Consejos Clave
Conexión: Siempre cierra conexiones del cliente cuando termines
Seguridad: Nunca expongas el servidor directamente a internet
Performance: Usa índices en tablas grandes
Backups: Programa backups automáticos en el servidor
Monitoreo: Revisa logs del servidor periódicamente
10. Recursos para Practicar
Servidores gratuitos: MySQL Community Edition, PostgreSQL
Clientes: MySQL Workbench, DBeaver, pgAdmin
Práctica local: XAMPP (incluye MySQL y phpMyAdmin)
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
Publicar un comentario