gpt4 book ai didi

mysql - Mysql插入一行后输出主键

转载 作者:行者123 更新时间:2023-11-30 00:50:49 25 4
gpt4 key购买 nike

我创建了一个触发器来帮助我在插入行时创建主键。我想获取刚刚插入的主键。但因为主键不是 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');

最佳答案

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

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_INCRMENT 列,以便您可以在插入后使用 LAST_INSERT_ID() 检索新行;

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

最后一个值得思考的问题:您真的需要使用 U 前缀存储您的用户 ID 吗?也许您可以只存储一个简单的 INT 值,并在选择时添加 U

关于mysql - Mysql插入一行后输出主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20995911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com