我在上一篇文章“ SELECT LAST_INSERT_ID() Not working with BIGINT on MySQL 5.6.11 ” 之后发布了一个新问题
无论如何,经过进一步调查后,我发现 LAST_INSERT_ID() 不起作用,因为我有一个问题表上的触发器 BeforeInsert。
所以基本上我的问题是在 INSERT 语句之后调用 LAST_INSERT_ID() 时它返回 0,因为我在这个表上有一个 BeforeInsert 作为触发器。如果我注释掉这个触发器,它可以正常工作,并且 LAST_INSERT_ID() 给了我正确的数字。
有什么想法可以解决这个问题吗?下面是触发器
DELIMITER $$
USE `mydb`$$
CREATE
DEFINER=`root`@`%`
TRIGGER `mydb`.`Booking_BINS`
BEFORE INSERT ON `mydb`.`Booking`
FOR EACH ROW
-- Edit trigger body code below this line. Do not edit lines above this one
BEGIN
DECLARE iNextBookingId INT;
SET iNextBookingId = (SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='Booking');
SET NEW.BookingId = iNextBookingId;
INSERT INTO AuditTrail (AuditTrailId,UserId,ActionType,TableName,RowKey,FieldName,OldValue,NewValue,LoggedOn) VALUES
(UUID(),NEW.LastChangedBy,'INSERT','Booking',NEW.BookingId,'HotelId',NULL,NEW.HotelId,NOW()),
(UUID(),NEW.LastChangedBy,'INSERT','Booking',NEW.BookingId,'AgentId',NULL,NEW.AgentId,NOW()),
(UUID(),NEW.LastChangedBy,'INSERT','Booking',NEW.BookingId,'SupplierId',NULL,NEW.SupplierId,NOW());
END$$