Bueno para que no quede la cosa sin terminar os cuelgo el codigo, ya probado, para generar el TRIGGER:
Código PHP:
DELIMITER $$
CREATE TRIGGER nuevareserva
BEFORE INSERT ON reserva
FOR EACH ROW
BEGIN
DECLARE locAux VARCHAR(6);
CALL generaLocalizador(@loc);
SELECT @loc INTO locAux;
SET NEW.localizador= locAux;
END$$
DELIMITER ;
Si necesitamos borrar el trigger usariamos la sentencia:
Código PHP:
DROP trigger nuevareserva;
Finalmente para que veais que no miento cuando digo que funciona os pongo las salidas al insertar dos nuevas reservas (comprador y crucero son los identificadores de los respectivos registros en otras tablas):
Código PHP:
mysql> insert into reserva (comprador, crucero) values (3432, 123);
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> select * from reserva;
+-------------+-----------+---------+
| localizador | comprador | crucero |
+-------------+-----------+---------+
| HNW32L | 3432 | 123 |
+-------------+-----------+---------+
1 row in set (0.00 sec)
mysql> insert into reserva (comprador, crucero) values (3563, 165);
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> select * from reserva;
+-------------+-----------+---------+
| localizador | comprador | crucero |
+-------------+-----------+---------+
| HNW32L | 3432 | 123 |
| SP4A8S | 3563 | 165 |
+-------------+-----------+---------+
2 rows in set (0.00 sec)
RESUMEN:
Necesitabamos que mysql generara automáticamente localizadores aleatorios formados por caracteres y dígitos. La tendencia de los programadores es delegar esta función en la aplicación cliente, sin embargo, el correcto uso de procedure y trigger permite al usuario de la base datos abstraerse de esta tarea con las ventajas que eso supone.
La solución que hemos optado es crear un procedimiento que concatena caracteres recuperados aleatoriamente de una tabla auxiliar rellena de los 36 caracteres del localizador. Con el disparador before insert lo que hacemos es llamar al procedimiento para obtener un localizador válido y usarlo para almacenarlo en el campo localizador de cada fila insertada.
Un saludo a todos
Jorge F.M. (Calico UAX)