提问者:小点点

如何仅用mysql获得特殊ID


我正在寻找一些东西可以帮助我获得票证的id创建在第一行。

我知道我可以通过使用不同的准备好的查询来简化这一点,但我不想(试着看看这样做是否可行,是否不使用多查询方式)。

我知道mysql中的LAST_INSERT_ID(),但我有点担心同时插入几行....

在我的研究过程中,我也看到有人直接选择指定的ID,但这是一个很大的资源成本。

我也看到@@插入,我没有看到他们之间有很大的区别,所以我也有同样的问题...

代码:

CREATE PROCEDURE `Create_Ticket`(IN idU bigint(16),IN type VARCHAR(45),IN pseudo VARCHAR(45), IN lienacc VARCHAR(100), IN liengame VARCHAR(100), IN content VARCHAR(500))
BEGIN
    INSERT INTO `dbOneT`.`Ticket` (`FaceitGame`,`Status`,`Ouverture` ) 
        VALUES ( liengame , 0 , NOW());
    INSERT INTO `dbOneT`.`Users_has_Ticket` (`Users_id`, `Ticket_id`) 
        VALUES ( idU, `Ticket`.`idTicket` );
    INSERT INTO `dbOneT`.`Accuse` (`Pseudo`,`LienFaceit`) 
        VALUES (pseudo, lienacc);
    INSERT INTO `dbOneT`.`Ticket_has_Accuse` (`Ticket_id_A`, `Accusé_id`) 
        VALUES (`Ticket`.`idTicket`, `Accuse`.`idAccuse`);
END

我运行的是MariaDB 10.3.27

“计算机”是raspberry pi OS(一个debian)上带有8GO RAM的raspberry pi 4B

谢谢你的帮助,祝你有个愉快的一天
汤姆


共1个答案

匿名用户

CREATE PROCEDURE `Create_Ticket`(IN idU bigint(16),IN type VARCHAR(45),IN pseudo VARCHAR(45), IN lienacc VARCHAR(100), IN liengame VARCHAR(100), IN content VARCHAR(500))
BEGIN
-- declare variables for inserted PK AI values
    DECLARE _idTicket INT;
    DECLARE _idAccuse INT;

    INSERT INTO `dbOneT`.`Ticket` (`FaceitGame`,`Status`,`Ouverture` ) 
        VALUES ( liengame , 0 , NOW());
-- save assignerd AI value to the variable
    SET _idTicket := LAST_INSERT_ID();
    INSERT INTO `dbOneT`.`Users_has_Ticket` (`Users_id`, `Ticket_id`) 
-- use saved value
        VALUES ( idU, _idTicket );
    INSERT INTO `dbOneT`.`Accuse` (`Pseudo`,`LienFaceit`) 
        VALUES (pseudo, lienacc);
-- save assignerd AI value to the variable
    SET _idAccuse := LAST_INSERT_ID();
-- use saved values
    INSERT INTO `dbOneT`.`Ticket_has_Accuse` (`Ticket_id_A`, `Accusé_id`) 
        VALUES (_idTicket, _idAccuse);
END