SQL -如何使一个BEFORE UPDATE触发器工作作为一个BEFORE INSERT?



刚才有人帮我用下面的结构创建了一个触发器:

CREATE TRIGGER `newTeacher` BEFORE INSERT ON `members`
FOR EACH ROW UPDATE
BEGIN
Declare fieldInfo varchar(30);
SELECT field_2 INTO fieldInfo 
FROM pfields_cont 
WHERE pfields_cont.member_id = NEW.member_ID;
IF fieldInfo = 'Teacher' THEN
SET NEW.member_group_id = 6;
END IF;
END;

我想做的是基本上改变用户的组,如果'Teacher'在一个注册字段中被发现。

这段代码可以很好地处理BEFORE UPDATE,但不能处理BEFORE INSERT。它不会抛出任何错误。它只是不做任何事情。

我被告知这是因为member_id是自动递增的,当触发器触发时,它的数字是不知道的。

谁能告诉我解决方法?或者将其转换为过程或函数,而不是触发器?

DDL:

CREATE TABLE `members` (
`member_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`member_group_id` smallint(6) NOT NULL DEFAULT 0,
`email` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
...
PRIMARY KEY (`member_id`),
KEY `bday_day` (`bday_day`),
KEY `ip_address` (`ip_address`),
KEY `email` (`email`),
KEY `member_groups` (`member_group_id`,`mgroup_others`(188))
) ENGINE=InnoDB AUTO_INCREMENT=161 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

在插入触发器中不能这样做。

在BEFORE插入触发器中,自动增量值尚未生成。

在AFTER insert触发器中,你不能SET NEW.member_group_id.

您可以在INSERT完成后执行UPDATE。也就是说,不是在触发器中,而是来自客户端。

或者您可以指定一个主键值,而不是依赖于自动增量。这意味着您需要一些其他的方法来生成唯一的id值。

相关内容

  • 没有找到相关文章

最新更新