MySQL:插入数据库时​​出现完整性错误

时间:2016-07-21 15:50:41

标签: mysql

所以,我在我的表中有一列在插入新条目时被触发器填充。

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

1 个答案:

答案 0 :(得分:1)

由于idusersAUTO_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 ;