Я публикую новый вопрос после моего предыдущего сообщения "SELECT LAST_INSERT_ID() Не работает с BIGINT в MySQL 5.6.11"
В любом случае, после дальнейшего расследования я обнаружил, что LAST_INSERT_ID() не работает, потому что у меня был триггер BeforeInsert в таблице, с которым у меня возникла проблема.
Итак, в основном моя проблема заключается в том, что при вызове LAST_INSERT_ID() после оператора INSERT он возвращает 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$$
AUTO_INCREMENT
для вас, а затем выполнять вставки FK (используяLAST_INSERT_ID()
или аналогичный через API) впоследствии, в той же транзакции, если это необходимо? - person eggyal   schedule 05.07.2013SET NEW.BookingId = iNextBookingId;
- это бит, с которым я не согласен. Я бы избавился от всего этого и просто поместил операторINSERT ...
непосредственно в триггерAFTER INSERT
, если такая конструкция вообще необходима. - person eggyal   schedule 05.07.2013