首页 > 解决方案 > 如何仅使用 mysql 获取特定 ID

问题描述

我正在寻找可以帮助我获取在第一行创建的票证的 ID。

我知道我可以通过使用不同的准备好的查询来简化这一点,但我不想(尝试看看是否可以通过这种方式,如果它不使用多个查询方式。

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

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

我也看到了@@INSERTED,我没有看到它们之间有很大的区别,所以我遇到了同样的问题......

编码 :

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

“计算机”是树莓派 4B,带有 8go ram
在 Raspberry Pi OS(A debian)上

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

标签: mysqlsqlmariadb

解决方案


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

推荐阅读