Tenho a seguinte tabela no MySQL:
CREATE TABLE `userlogtype` (
`UserLogTypeID` int NOT NULL AUTO_INCREMENT,
`UserLogType` varchar(150) DEFAULT NULL,
`InsertUser` varchar(100) DEFAULT NULL,
`InsertDateTime` datetime DEFAULT '0000-00-00 00:00:00',
`UpdateUser` varchar(100) DEFAULT NULL,
`UpdateDateTime` datetime DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`UserLogTypeID`)
) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
e gostaria de criar 2 gatilhos: um após a inserção e outro após a atualização.
- Após Insert eu gostaria de atualizar a nova linha: campos InsertUser + InsertDateTime
- Após a atualização, gostaria de atualizar a nova linha: campos UpdateUser + UpdateDateTime
Eu tentei isso:
CREATE DEFINER=`root`@`localhost` TRIGGER `userlogtype_AFTER_INSERT` AFTER INSERT ON `userlogtype` FOR EACH ROW BEGIN
UPDATE userlogtype
SET InsertUser = CASE WHEN InsertUser IS NULL OR InsertUser='' OR InsertUser=' ' THEN CURRENT_USER ELSE InsertUser END,
InsertDateTime = CASE WHEN InsertDateTime IS NULL OR InsertDateTime='0000-00-00 00:00:00' OR InsertDateTime=0 THEN CURRENT_TIMESTAMP ELSE InsertDateTime END
WHERE UserLogTypeID=NEW.UserLogTypeID ;
END
Consigo salvar a trigger sem erro no MySQL Workbench, mas quando testo um insert (inserindo apenas um valor para UserLogType), dá o seguinte erro:
Falha na operação: ocorreu um erro ao aplicar o script SQL ao banco de dados. Executando: INSERT INTO
artistabookingdb
.userlogtype
(UserLogType
) VALORES ('erty');ERRO 1442: 1442: Não é possível atualizar a tabela 'userlogtype' na função/gatilho armazenado porque ela já é usada pela instrução que invocou esta função/gatilho armazenado. Instrução SQL: INSERT INTO
artistabookingdb
.userlogtype
(UserLogType
) VALORES ('erty')
É um pouco estranho que os valores padrão não apareçam quando tento inserir um valor no campo UserLogType: