INSERT с SELECT
ID int auto_increment primary key,
Name char
Делаю "insert .... values(0, "Имя");"
и хочу в этом-же запросе получить ID, сгенерированное СУБД при этом запросе. Возможно-ли это?
Есть таблица:
ID int auto_increment primary key,
Name char
Делаю "insert .... values(0, "Имя");"
и хочу в этом-же запросе получить ID, сгенерированное СУБД при этом запросе. Возможно-ли это?
Просто использую INSERT ты этого сделать не сможешь, но при использовании MS SQL можно соорудить хранимую процедуру в которую передавать данные для вставки там открывать транзакцию вставлять данные узнавать максимальный ID закрывать транзакцию и возвращать тебе ID, вот помоему только так
MySQL
Тогда не судьба
Что-то непонятно зачем это надо. А генераторы или триггеры уже не в ходу?
а где ты их в MySQL видел?
MySQL
LAST_INSERT_ID()
Возвращает последний автоинкремент, сгенерированный INSERT
2Gauss
А ты говоришь, не судбьа:)
LAST_INSERT_ID()
Возвращает последний автоинкремент, сгенерированный INSERT
2Gauss
А ты говоришь, не судбьа:)
а ты уверен что между Insert и Last_Insert_Id() никто другой Insert не сделал? Я - нет! так-что пока нет транзакции - не судьба!
а ты уверен что между Insert и Last_Insert_Id() никто другой Insert не сделал? Я - нет! так-что пока нет транзакции - не судьба!
Ну, если уж база угружена так, что за те доли секунды, между INSERT и возвращением ID кто-то с большой вероятностью может сгенерить ID, то мускул, начиная с 3.23 поддерживает транзакции. Да, к тому же на эти две операции можно ее и локнуть.
А еще можно послать все это, как один запрос.
INSERT INTO matable SET field1=valye1; SELECT MYSQL_INSERT_ID();
Тогда мускул, по идее, должен их проглотить, как одну команду и выполнить оба запроса один за другим.
а ты уверен что между Insert и Last_Insert_Id() никто другой Insert не сделал? Я - нет! так-что пока нет транзакции - не судьба!
RTFM. Last_insert_id вернет тебе последний id, сгенерированный в текущей сессии. Даже если после insert'a 1-го id'a тебе в другом соединении еще тыщу сделают, last_insert_id стабильно вернет единицу.