我在 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;
我想创建 2 个触发器:一个在插入后,一个在更新后。
- 插入后我想更新新行:InsertUser + InsertDateTime 字段
- 更新后我想更新新行:UpdateUser + UpdateDateTime 字段
我试过这个:
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
我可以在 MySQL Workbench 中保存触发器而不会出现错误,但是当我测试插入(仅插入 UserLogType 的值)时,会出现以下错误:
操作失败:将 SQL 脚本应用到数据库时出错。执行:INSERT INTO
artistabookingdb
.userlogtype
(UserLogType
) VALUES ('erty');错误 1442:1442:无法更新存储函数/触发器中的表“userlogtype”,因为它已被调用此存储函数/触发器的语句使用。SQL 语句:INSERT INTO
artistabookingdb
。userlogtype
(UserLogType
) 值 ('erty')