在Mysql中插入一行后输出主键

时间:2014-01-08 12:39:05

标签: mysql triggers phpmyadmin

我创建了一个触发器来帮助我在插入行时创建主键。我想获得我刚插入的主键。但因为主键不是auto_increment我不能使用

SELECT LAST_INSERT_ID();

那我怎样才能获得主键?

这是触发器

CREATE TRIGGER before_insert_user_info
BEFORE INSERT ON USER_INFO
FOR EACH ROW
SET new.uID = CONCAT('U', ((SELECT MAX(CAST(SUBSTRING(uID, 2, length(uID)) AS UNSIGNED)) FROM USER_INFO)+1));

这是插入

INSERT INTO USER_INFO(name) VALUES ('Peter');

1 个答案:

答案 0 :(得分:0)

依靠触发器生成主键有点不寻常。无法从触发器中检索数据(例如,它没有返回值)。但您可以重复使用tigger的逻辑来检索生成的值:

INSERT INTO user_info VALUE (@newUID, ...);
SELECT MAX(CAST(SUBSTRING(@newUID, 2, LENGTH(@newUID)) AS UNSIGNED)) AS last_insert_id
FROM user_info; -- this is the generated value

在事务中包装这两个语句,以确保不在其间插入新用户。

作为替代方案,我会创建另一个INT AUTO_INCREMENT列,以便您可以在插入LAST_INSERT_ID()之后检索新行;

虽然我们在这里,但我会将这个新字段设为(surrogate)主键。相同的触发器仍然可以生成“公共”用户ID,但之后我们将回到更常见的架构。

最后的想法:您是否真的需要使用U前缀存储您的用户ID?也许您只能存储一个普通的INT值,并在选择上预先U