Мне нужно ВСТАВИТЬ INTO несколько таблиц для каждой записи, и чтобы сделать это безопасно, я решил сделать весь оператор транзакцией.Однако мой код основан на том, что LAST_INSERT_ID () обновляется с каждым INSERT INTO, и похоже, что LAST_INSERT_ID () обновляется только каждый TRANSACTION .Поэтому мне либо нужна альтернатива типичному соглашению START TRANSACTION; COMMIT;или мне нужна альтернатива LAST_INSERT_ID (), которая по-прежнему будет достигать той же цели.
Оба person и yearandpage имеют первичные ключи, которые автоматически увеличиваются,и эти ключи являются внешними ключами в таблице personinschoolyearbook .
Исходная проблема, которая заставила меня задать этот вопрос, состоит в том, что у меня есть две таблицы с первичными ключами и реляционная таблица, которая ссылается на оба,Как я могу обновить все три одновременно с одной записи данных?Я рассмотрел каскадную ссылочную целостность , которая автоматически обновит мои внешние ключи, но я не думаю, что это сработает, поскольку в моей реляционной таблице есть значение не-внешнего ключа (состояние), которое необходимо вставить вручную.
START TRANSACTION;
INSERT INTO person (firstname, middlename, lastname, maidenname)
VALUES ('Test2fname', NULL, 'Test2lname', NULL);
INSERT INTO personinschoolyearbook (personid, yearandpageid, status)
VALUES (LAST_INSERT_ID(), 0, 'Test2status'); --The zero is a placeholder, to be replaced with the primary key id that will be created in the next INSERT INTO
SELECT @personid := LAST_INSERT_ID();
INSERT INTO yearandpage (yearincluded, page, schoolid, url) --Here is where the LAST_INSERT_ID() should update but doesn't
VALUES (0000, 00, 2, 'Test2url');
UPDATE personinschoolyearbook SET yearandpageid=LAST_INSERT_ID()
WHERE personinschoolyearbook.personid = @personid;
COMMIT;
В данный момент значение LAST_INSERT_ID () не изменяется, и в моей реляционной таблице personinschoolyearbook столбец, который должен иметь новый идентификатор, который был взят из yearandpage *Вместо этого 1021 * - это тот же идентификатор, что и у персона .