我想知道是否有人能给我指出正确的方向.我使用MySQL存储过程一次运行两个查询.

我正在插入一个客户端记录,我为客户端分配了一个虚拟生成的UUID,同时我试图将新创建的ID和用户ID(创建客户端的用户)一起插入另一个表.

创建虚拟UUID的字段,而不是存储在服务器上

    client_id        varchar(36) generated always as
        (insert(
                insert(
                        insert(
                                insert(hex(id_bin), 9, 0, '-'),
                                14, 0, '-'),
                        19, 0, '-'),
                24, 0, '-')
        ) virtual,
    id_bin         binary(16)

插入虚拟生成的ID

unhex(replace(uuid(), '-', ''))

我已经try 使用last_insert_id(),但由于我的id不是自动递增的,它没有帮助. 我也试过了

select * from client_info where client_id in (select max(client_id) from client_info);

我的存储过程如下所示(缩短以显示所需的字段):

create procedure addClient(

    in puser_id varchar(36),
    in pname varchar(255)
)
BEGIN

    insert into client_info (id_bin, f_name) values (unhex(replace(uuid(), '-', '')), pname);
    insert into clients (user_id, client_id) values (puser_id, XXXX)
        END
    //
DELIMITER ;

不确定如何将新的客户端ID插入到上面代码中显示XXXX的第二个INSERT语句中

推荐答案

声明一个变量,这样就可以在两个INSERT语句中使用它.

BEGIN
    DECLARE new_uuid BINARY(16);

    SET new_uuid = unhex(replace(uuid(), '-', ''));

    insert into client_info (id_bin, f_name) values (new_uuid, pname);
    insert into clients (user_id, client_id) values (puser_id, new_uuid);
END

Mysql相关问答推荐

MYSQL子查询

SQL查询仅插入5行

为什么我安装MySQL时不能使用3306端口?

奇怪的MySQL SELECT循环;但不是\G

比较2个mysql json数据类型列

在两个日期之间生成每个月的1行数据.

了解 Spring 和数据库级别的事务?

包含 group_contact 的视图的问题

查找同时玩过这两种游戏的玩家

插入重复键查询以在每一行上进行自定义更新

Select 在同一天售出不同活动门票的收银员

为什么在有 BEGIN 和 END 时为存储过程指定分隔符?

无法在两个 mysql 表上执行内部联接

这是将表单数据插入 MySQL 数据库的安全方法吗?

在 Android 上运行 AMP (apache mysql php)

不正确的整数(2147483647)被插入到 MySQL 中?

用户 'User'@'%' 和 'User'@'localhost' 不一样吗?

Mysql:创建表时将DATETIME的格式设置为'DD-MM-YYYY HH:MM:SS'

MySQL 更新连接表

与 MySql 的连接正在自动中止.如何正确配置Connector/J?