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

标签 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 而不是当前的 auto_increment 值。
我需要在触发代码中进行哪些更改,以便用于生成 uid 的值是实际 id 而不是始终 0

最佳答案

由于 idusers 是一个 AUTO_INCRMENT 字段,因此只有在将记录插入表后才知道其值。
使用 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 ;

关于MySQL:插入数据库时​​出现完整性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38508812/

相关文章:

php - 谁能帮我如何在字符串中绑定(bind)变量?

mysql - 在触发器中使用 mysql 用户

Mysql:使用 IN 子查询删除

php - Isset 不适用于 post 方法

MySQL:高效地返回组不为空的分组字段

mysql - mysql如何处理并发访问?

mysql - 存储过程中的 DML 是否在单个事务中运行?

JavaScript 调用存储过程

Mysql - where 子句中的左连接问题

mysql - 优化超过百万条记录的表的mysql更新