¿Y cómo hace MySQL para saber cuál valor de
seccion en qué registro debe tomarlo?
El problema es que en realidad no estás tomando ningún dato. Para que eso funcionara, deberías hacer algo así:
Código:
CREATE TRIGGER insert_clientes before insert ON clientes
FOR EACH ROW
INSERT INTO auditoria_clientes(nombre, anterior_seccion, usuario, modificado )
SELECT nombre,seccion, CURRENT_USER(), NOW() FROM clientes
WHERE nombre = NEW.nombre;
Ten en cuenta que en los triggers del evento INSERT los únicos valores de entrada que dispones son los que pusiste en la sentencia que lo disparó, no puedes usar otros valores a menos que dentro del cuerpo del trigger los obtengas de algún modo. Este es el caso. No estás posicionado en un registro, eso no existe. O usas la pseudotabla NEW, o debes obtener el dato de alguna fuente.
En este ejemplo estoy SUPONIENDO que el INSERT que disparó el trigger incluye un campo
nombre de donde tomar el valor, de lo contrario el código podría quedar:
Código:
CREATE TRIGGER insert_clientes before insert ON clientes
FOR EACH ROW
INSERT INTO auditoria_clientes(nombre, anterior_seccion, usuario, modificado )
VALUES(NEW.nombre, NEW.seccion, CURRENT_USER(), NOW());