MySQL:存储过程为最后一个插入id返回null
我在mySql中遇到了一个SP问题,当我想选择我的标识符时,它总是将null作为值MySQL:存储过程为最后一个插入id返回null,mysql,Mysql,我在mySql中遇到了一个SP问题,当我想选择我的标识符时,它总是将null作为值 DELIMITER $$ CREATE PROCEDURE insert_details_facture(IN typefacture INT, IN codeactivite VARCHAR(255), IN qte INT, IN pu DOUBLE, IN unite VAR
DELIMITER $$
CREATE PROCEDURE insert_details_facture(IN typefacture INT,
IN codeactivite VARCHAR(255),
IN qte INT,
IN pu DOUBLE,
IN unite VARCHAR(255),
IN montant DOUBLE)
BEGIN
DECLARE identete INT;
SELECT identete = numfacture FROM entetefacture WHERE numfacture = LAST_INSERT_ID();
END$$
CALL insert_details_facture(10,'l',10,12,'l',20)
当我执行此命令时,它将identite=numfacture作为列的名称,null作为值
DELIMITER $$
CREATE PROCEDURE insert_details_facture(IN typefacture INT,
IN codeactivite VARCHAR(255),
IN qte INT,
IN pu DOUBLE,
IN unite VARCHAR(255),
IN montant DOUBLE)
BEGIN
DECLARE identete INT;
SELECT identete = numfacture FROM entetefacture WHERE numfacture = LAST_INSERT_ID();
END$$
CALL insert_details_facture(10,'l',10,12,'l',20)
检查
在没有参数的情况下,LAST_INSERT_ID()返回一个BIGINT无符号(64位)值,该值表示由于最近执行的INSERT语句而成功为自动增量列插入的第一个自动生成的值
所以你们得到的结果是显而易见的
要获取最后一条记录,可以使用limit
SET identete = (SELECT numfacture FROM entetefacture ORDER BY id DESC LIMIT 1);
这篇评论太长了
LAST\u INSERT\u ID()
不保证具有有效值。例如,各国:
如果上一条语句返回错误,则
最后一次插入的ID()未定义。对于事务表,如果
语句由于错误而回滚,值为
最后一个插入ID()未定义
类似地,如果当前会话没有数据库更改,则该值将是未定义的
此外,如果要设置值,请在选择中使用:=
:
SELECT identete := numfacture
FROM entetefacture
WHERE numfacture = LAST_INSERT_ID();
为什么不使用limit
获取表中的最后一行呢
SET identete = (SELECT numfacture FROM entetefacture ORDER BY id LIMIT 1);