所以,我在我的表中有一列在插入新条目时被触发器填充。
CREATE TABLE `users` (
`idusers` int(11) NOT NULL AUTO_INCREMENT,
`uid` char(64) DEFAULT NULL,
`uname` varchar(80) NOT NULL,
`password` char(128) NOT NULL,
`mail` varchar(120) NOT NULL,
PRIMARY KEY (`idusers`),
UNIQUE KEY `uname_UNIQUE` (`uname`),
UNIQUE KEY `mail_UNIQUE` (`mail`),
UNIQUE KEY `uid_UNIQUE` (`uid`)
);
DELIMITER $$
TRIGGER `flask`.`users_BEFORE_INSERT` BEFORE INSERT ON `users` FOR EACH ROW
BEGIN
set new.uid = sha2(new.idusers, 256);
END$$
DELIMITER ;
现在的问题是,当我尝试添加一个新行(由于错误而只有一个测试版)时,在触发器中new.idusers
的值总是0
而不是0
而不是当前的auto_increment值
我需要在触发器代码中更改哪些内容,以便用于生成uid的值是实际ID而不是All resources
?
答案 0 :(得分:1)
由于idusers
是AUTO_INCREMENT
字段,因此仅在将记录插入表格后才知道其值。
使用AFTER INSERT
触发器而不是BEFORE INSERT
触发器,并更新新插入的记录:
DELIMITER $$
CREATE TRIGGER `flask`.`users_AFTER_INSERT` AFTER INSERT ON `users` FOR EACH ROW
BEGIN
UPDATE users SET uid = sha2(NEW.idusers, 256) WHERE idusers = NEW.idusers;
END $$
DELIMITER ;