DELIMITER $$
-- Criando o procedimento com seu nome
CREATE DEFINER=`root`@`localhost` PROCEDURE `validamacsamuel` (IN `$idmac` VARCHAR(17), OUT `$ativo` BOOLEAN, OUT `$contador` INT, OUT `$limite` INT)   
BEGIN
    SELECT ativo, contador, limite INTO $ativo, $contador, $limite 
    FROM macsamuel
    WHERE idmacsamuel=$idmac;
END$$
DELIMITER ;

-- --------------------------------------------------------

-- Tabela macsamuel
CREATE TABLE `macsamuel` (
  `idmacsamuel` varchar(17) NOT NULL,
  `nome` varchar(25) DEFAULT NULL,
  `contador` int(10) UNSIGNED DEFAULT 0,
  `limite` int(10) UNSIGNED DEFAULT 0,
  `ativo` tinyint(1) DEFAULT 0,
  PRIMARY KEY (`idmacsamuel`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- --------------------------------------------------------

-- Tabela leiturasamuel
CREATE TABLE `leiturasamuel` (
  `idleiturasamuel` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `macsamuel_idmacsamuel` varchar(17) NOT NULL,
  `datahora` datetime DEFAULT NULL,
  `valor` int(10) UNSIGNED DEFAULT NULL,
  PRIMARY KEY (`idleiturasamuel`),
  KEY `leiturasamuel_FKIndex1` (`macsamuel_idmacsamuel`),
  CONSTRAINT `leiturasamuel_ibfk_1` FOREIGN KEY (`macsamuel_idmacsamuel`) REFERENCES `macsamuel` (`idmacsamuel`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- --------------------------------------------------------

-- Triggers atualizados para samuel
DELIMITER $$
CREATE TRIGGER `tgdeleteleiturasamuel` AFTER DELETE ON `leiturasamuel` FOR EACH ROW BEGIN
UPDATE macsamuel
SET contador=contador-1
WHERE idmacsamuel=old.macsamuel_idmacsamuel;
END
$$
DELIMITER ;

DELIMITER $$
CREATE TRIGGER `tginsertleiturasamuel` AFTER INSERT ON `leiturasamuel` FOR EACH ROW BEGIN
UPDATE macsamuel
SET contador=contador+1
WHERE idmacsamuel=new.macsamuel_idmacsamuel;
END
$$
DELIMITER ;

DELIMITER $$
CREATE TRIGGER `tgvalidamacsamuel` BEFORE INSERT ON `leiturasamuel` FOR EACH ROW BEGIN
CALL validamacsamuel(new.macsamuel_idmacsamuel, @ativo,@contador,@limite);
if @ativo=0 then signal sqlstate '45000' set message_text = 'MAC INATIVO';
END IF;

if @contador>=@limite then signal sqlstate '45000' set message_text = 'LIMITE DE LEITURAS ATINGIDO!';
END IF;
END
$$
DELIMITER ;

-- Inserindo um dado de teste
INSERT INTO `macsamuel` (`idmacsamuel`, `nome`, `contador`, `limite`, `ativo`) VALUES
('01:02:03', 'Placa 01', 0, 2, 1);