Como hacer un autoincremento conun trigger SQL

Si tenemos una tabla tipo:

CREATE TABLE T_CLIENTES (
CLI_ID int(11) NOT NULL,
CLI_NOMBRE char(32) COLLATE utf8_unicode_ci NOT NULL,
CLI_APELLIDO varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
CLI_EMPRESA varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `T_CLIENTES` (`CLI_ID`, `CLI_NOMBRE`, `CLI_APELLIDO`, `CLI_EMPRESA`) VALUES ('1', 'Rosa', 'Navas', 'Empresa ABC'), ('2', 'Almedes', 'Rosmeri', 'ABE. SA')

Ahora el proximo cliente deberia ser el número 3, pero si mando en el insert un numero diferente, deseo correjir esto de una forma automática, lo puedo resolver con un trigger y una function:

En la function, es extraer el más alto de los identificadores de la tabla T_CLIENTES, lo que en nuestro caso daria 2 a esto le sumo 1 antes de reenviar el valor de la function:

DELIMITER $$
CREATE DEFINER=root@localhost FUNCTION G_F_NextIdClient() RETURNS int(11)
READS SQL DATA
DETERMINISTIC
BEGIN
DECLARE nb INTEGER;
SELECT MAX(CLI_ID) INTO nb FROM T_CLIENTES;
RETURN nb+1;
END$$
DELIMITER ;

Una vez esto realizado, creo un trigger, y antes de la inserción (insert) le digo de reasignar el valor que obtengo con G_F_NextIdClient() de esta manera sea cual sea el valor que se envie, siempre sera el valor correcto

CREATE TRIGGER CLI_T_addCliente BEFORE INSERT ON T_CLIENTES
FOR EACH ROW BEGIN
SET NEW.CLI_ID = G_F_NextIdClient();
END

Ahora si mando un insert como este:

INSERT INTO T_CLIENTES (CLI_ID, CLI_NOMBRE, CLI_APELLIDO, CLI_EMPRESA) VALUES (’45’, ‘Andres’, ‘Perez’, ‘Otra Empresa’);

No hay problema ya que el id 45 es remplazado por el 3, y asi mi tabla esta siempre correcta, esta es una buena opcion para cuando quieres exportar una lista de clientes de otra empresa y deseas agregarlos a tu empresa pero con tus propios numeros de clientes, disfrutalo !!!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *