2016-03-13 5 views
-2

, как я могу получить идентификатор последнего оператора вставкиполучить последний идентификатор после вставки в MySQL

им с помощью триггера, чтобы создать идентификатор для каждой записи

INSERT INTO table1_seqdocument VALUES (NULL); 
    SET NEW.tracknum = CONCAT('DOC', LPAD(LAST_INSERT_ID(), 3, '0')); 

и мне нужно, что идентификатор для других таблица

это это моя вставка заявление

INSERT INTO tble_transaction 
    (
     tracknum 
    ,signatoryid 
    ,signed 
    ,status 
    ,signatorylevel 
) 
    VALUES 
    (?,?,?,?,?) 

то, что я хочу, чтобы получить идентификатор и используйте его для другого оператора insert, но используя другую таблицу. Является ли это возможным? спасибо

+0

Пожалуйста, покажите полный создать триггер заявление. Это на 'tble_transaction'? – trincot

+0

Я не могу воспроизвести проблему. Ваш код, когда вы его разместили, отлично работает: см. [Скрипка] (http://sqlfiddle.com/#!9/9aaee/1). Предоставьте инструкции 'create table' и' create trigger', чтобы увидеть, что может быть неправильным. Вы определили первичный ключ и auto_increment? – trincot

+0

Использование внутренней базы данных как своего рода значимое значение, выходящее за рамки базы данных, просто вызывает проблемы. Переосмыслите свой дизайн. – Strawberry

ответ

0

Вы можете использовать @@ IDENTITY

SELECT @@IDENTITY AS [@@IDENTITY]; 
0

last_insert_id() может только сказать вам идентификатор самого последнего автоматически генерируемой ID для всего этого соединения с базой данных, а не для каждой отдельной таблицы, которая также почему запрос должен читать только SELECT LAST_INSERT_ID() - без указания таблицы. Как только вы отпустите другой запрос INSERT в этом соединении, он будет перезаписан. Если вы хотите сгенерировать ID при вставке в какую-либо таблицу, вы должны запустить SELECT LAST_INSERT_ID() сразу после этого (или использовать некоторую функцию API, которая делает это для вас).

Если вам нужен новейший идентификатор в настоящее время в произвольной таблице, вы должны сделать SELECT MAX (id) в этой таблице, где id - это имя вашего столбца идентификатора. Однако это не обязательно самый недавно сгенерированный идентификатор, если эта строка была удалена, и она не обязательно будет сгенерирована из вашего соединения, в случае, если другому соединению удастся выполнить INSERT между вашим собственным INSERT и вашим выбором идентификатора.

(Для записи, ваш запрос фактически возвращает N строк, содержащих самый последний сгенерированный идентификатор на этой связи базы данных, где N это количество строк в table1.)

+1

Asker уже использует 'LAST_USER_ID()' сразу после одной вставки. Я бы даже не предложил сделать 'select max (id)'. И как ваша последняя строка относится к вопросу? В вопросе нет запросов из N строк или таблицы1. – trincot

Смежные вопросы