SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 01.11.2012 05:35:13

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Как определить автоинкремент который устанавливается при insert into?

Здравствуйте, подскажите, пожалуйста. При записи данных в базу нужно узнать какой именно автоинкремент будет записан, чтобы совершить какие либо действия.
Т.е. скажем я наполняю базу предприятий через insert into и мне нужно получить id предприятия, которое будет в это время записано. Выдернуть его сразу после запроса, наверное будет нелогично, тк. не исключено, что в то же время кто-то другой будет заносить предприятия. Надеюсь, если какой-либо способ получить его. Отрицательный ответ тоже будет полезной информацией.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#2 01.11.2012 11:32:46

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Как определить автоинкремент который устанавливается при insert into?

SELECT LAST_INSERT_ID()

Неактивен

 

#3 01.11.2012 13:14:48

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Как определить автоинкремент который устанавливается при insert into?

Большое спасибо за ответ, но возник вопрос.
Насколько я понимаю, сначала нужно сделать
insert into
а потом
SELECT LAST_INSERT_ID();
А что будет, если скажем я заношу 10 тысяч предприятий, которые поочередно заносятся через insert into скажем в течении 10 минут, а в это время какой-нибудь пользователь решил занести свое предприятие.
Также не ясно в чем в таком случае разница между вышеуказанным Вариантом и таким
сначала сделать
insert into
а потом
SELECT ... order by id desc
Т.е. по логике вещей в этом случае я тоже получу последнюю запись по id, который является автоинкрементом.

Т.е. для меня главное не получить ненакором запись, которую заносит пользователь.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#4 01.11.2012 13:18:27

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как определить автоинкремент который устанавливается при insert into?

Другой пользователь будет заводить своё предприятие в рамках своей сессии, а не Вашей сессии, а функция LAST_INSERT_ID возвращает идентификатор именно в рамках сессии, так что Вы не получите id от записи, занесенной другим пользователем.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 01.11.2012 13:20:14

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как определить автоинкремент который устанавливается при insert into?

platedz написал:

сначала сделать
insert into
а потом
SELECT ... order by id desc

Вот если так, то Вы действительно можете получить ID записи от пользователя в другой сессии.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#6 01.11.2012 13:27:14

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Как определить автоинкремент который устанавливается при insert into?

Кроме прочего нашел еще следующую информацию. Но насколько понял лучше использовать LAST_INSERT_ID, только не разобрался в чем разница.

Нашел тут http://веб-информ.рф/php/function.mysql-insert-id.html


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#7 01.11.2012 13:29:51

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Как определить автоинкремент который устанавливается при insert into?

Спасибо за ответ. Про сессии не знал. Было бы интересно почитать что-либо по этому поводу, только на русском языке. Т.ч. если у кого-то найдется по данному вопросу пара интересных ссылок буду благодарен.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#8 01.11.2012 13:46:34

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Как определить автоинкремент который устанавливается при insert into?

platedz написал:

Спасибо за ответ. Про сессии не знал. Было бы интересно почитать что-либо по этому поводу, только на русском языке. Т.ч. если у кого-то найдется по данному вопросу пара интересных ссылок буду благодарен.

А что вам непонятно? когда ваш скрипт выполняет какой либо запрос или несколько он открывает соединение (сессию) с сервером БД. В рамках этого соединения функция LAST_INSERT_ID() будет возвращать значение автоинкрементного поля последней вставленной записи, если оно, поле, существует и запись вставилась успешно. У другого пользователя будет другое соединение и другой результат этой функции, если он вставит запись

Отредактированно Shopen (01.11.2012 13:47:11)

Неактивен

 

#9 01.11.2012 14:18:14

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Как определить автоинкремент который устанавливается при insert into?

Т.е. то что между mysql_connect и mysql_close?


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#10 01.11.2012 18:54:46

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как определить автоинкремент который устанавливается при insert into?

platedz написал:

Т.е. то что между mysql_connect и mysql_close?

Именно.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#11 02.11.2012 12:33:55

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Как определить автоинкремент который устанавливается при insert into?

platedz написал:

Т.е. то что между mysql_connect и mysql_close?

а что такое mysql_connect и mysql_close? smile

Это я к тому, что это зависит от реализации приложения клиента. если вы про пэхапэ - то да

Неактивен

 

#12 02.11.2012 16:00:28

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Как определить автоинкремент который устанавливается при insert into?

Большое спасибо всем ответившим.

Вообще про php. Но для расширения кругозора было бы интересно почитать что-нибудь на эту тему. Т.е. о том что из себя представляет сессия в приципе в mysql.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#13 19.08.2013 03:35:41

Ramzes
Участник
Зарегистрирован: 19.08.2013
Сообщений: 1

Re: Как определить автоинкремент который устанавливается при insert into?

Для PHP в данном случае чистый SQL юзать не обязательно, есть функция mysqli_insert_id

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson