Crud con motor merge en mariadb y mysql (mrg_myisam)
El motor merge es un motor de almacenamiento especial de MySQL y MariaDB. Se suele usar para manejar tablas muy grandes dividiéndolas en partes más pequeñas y manejables- Crear las tablas base
-- Tabla de pedidos del año 2024 CREATE TABLE pedidos_2024 ( id INT NOT NULL AUTO_INCREMENT, cliente VARCHAR(100) NOT NULL, monto DECIMAL(10,2) NOT NULL, fecha DATE NOT NULL, PRIMARY KEY (id), INDEX idx_fecha (fecha) ) ENGINE=MyISAM; -- Tabla de pedidos del año 2025 CREATE TABLE pedidos_2025 ( id INT NOT NULL AUTO_INCREMENT, cliente VARCHAR(100) NOT NULL, monto DECIMAL(10,2) NOT NULL, fecha DATE NOT NULL, PRIMARY KEY (id), INDEX idx_fecha (fecha) ) ENGINE=MyISAM; - Crear la tabla MERGE (MRG_MYISAM)
CREATE TABLE pedidos_total ( id INT NOT NULL AUTO_INCREMENT, cliente VARCHAR(100) NOT NULL, monto DECIMAL(10,2) NOT NULL, fecha DATE NOT NULL, PRIMARY KEY (id), INDEX idx_fecha (fecha) ) ENGINE=MRG_MYISAM UNION=(pedidos_2024, pedidos_2025) INSERT_METHOD=LAST;-- Los INSERT van siempre a la última tabla - CRUD completo sobre la tabla MERGE "pedidos_total"
- C = CREATE (INSERT)
-- Insertar un pedido nuevo (se guardará en pedidos_2025 porque INSERT_METHOD=LAST) INSERT INTO pedidos_total (cliente, monto, fecha) VALUES ('Juan Pérez', 1250.75, '2025-04-10'); -- Insertar varios registros INSERT INTO pedidos_total (cliente, monto, fecha) VALUES ('Ana López', 850.00, '2025-04-12'), ('Carlos Ruiz', 2340.50, '2024-11-05'); - R = READ (SELECT)
-- Ver todos los pedidos (de 2024 y 2025 juntos) SELECT * FROM pedidos_total; -- Ver solo pedidos del 2025 SELECT * FROM pedidos_total WHERE fecha >= '2025-01-01'; -- Pedidos ordenados por monto descendente SELECT id, cliente, monto, fecha FROM pedidos_total ORDER BY monto DESC; -- Total de ventas SELECT SUM(monto) AS total_ventas, COUNT(*) AS cantidad_pedidos FROM pedidos_total; - U = UPDATE
-- Actualizar el monto de un pedido específico UPDATE pedidos_total SET monto = 1500.00 WHERE id = 5; -- Actualizar el cliente y fecha de varios registros UPDATE pedidos_total SET cliente = 'Ana López García', fecha = '2025-04-15' WHERE cliente = 'Ana López'; - D = DELETE
-- Borrar un pedido específico DELETE FROM pedidos_total WHERE id = 3; -- Borrar todos los pedidos de antes de 2025 (solo afectará a la tabla 2024) DELETE FROM pedidos_total WHERE fecha < '2025-01-01';
- C = CREATE (INSERT)
Notas importantes sobre CRUD en tablas MERGE
- INSERT: Siempre va a la tabla indicada en INSERT_METHOD (FIRST o LAST). Si pones NO, no se podrá insertar.
- UPDATE y DELETE: Funcionan normalmente y afectan a la tabla real donde está el registro.
- SELECT: Muestra los datos de todas las tablas unidas como si fuera una sola.
- No se pueden usar FOREIGN KEYS ni transacciones, porque es MyISAM.
- Si se borra la tabla MERGE (DROP TABLE pedidos_total), solo se borra la definición, no los datos de las tablas base.