За последние 24 часа нас посетили 54050 программистов и 1721 робот. Сейчас ищут 809 программистов ...

Определение id записи на момент вставки ее в базу

Тема в разделе "PHP для новичков", создана пользователем Алексей, 21 июл 2009.

  1. Алексей

    Алексей Активный пользователь

    С нами с:
    24 апр 2009
    Сообщения:
    27
    Симпатии:
    0
    Добрый день.

    Нужен совет.

    В базу данных в течении одной минуты вставляется до 10-и записей.
    Каким образом можно определить уникальный id (с первичным ключом и auto_increment-ом) конкретной записи на момент, когда она вставляется в базу?

    Все записи представляют собой данные о пользователе, которые могут повторяться. Т.е. кроме поля id уникальных полей больше нету.

    Спасибо.
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    [sql]SELECT LAST_INSERT_ID();[/sql]
     
  3. Алексей

    Алексей Активный пользователь

    С нами с:
    24 апр 2009
    Сообщения:
    27
    Симпатии:
    0
    Ок. А если в одно и тоже время добавляются две или несколько записей - есть вероятность того, что эта функция подтянет не свою строку?
     
  4. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    А я хз.
    Знаю только, что возвращает ID ПОСЛЕДНЕЙ вставленной записи.
    Если так, например:

    [sql]INSERT INTO `table` VALUES (null, "Abc");
    SELECT LAST_INSERT_ID();[/sql]

    То будет правильно, а если так:

    [sql]INSERT INTO `table` VALUES (null, "Abc"), (null, "Def");
    SELECT LAST_INSERT_ID();[/sql]

    то не знаю.
     
  5. Алексей

    Алексей Активный пользователь

    С нами с:
    24 апр 2009
    Сообщения:
    27
    Симпатии:
    0
    Ок. Спасибо.
     
  6. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Если я не ошибаюсь, LAST_INSERT_ID возвращает ID для соединения. Если инсерты идут с разных соединений, то конфликтов не будет.
     
  7. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
  8. orange

    orange Активный пользователь

    С нами с:
    10 май 2007
    Сообщения:
    25
    Симпатии:
    0
    по моему лучше запросом LAST_INSERT_ID() узнать, так как если после вставки и перед вызовом mysql_insert_id проскочит какой нибудь запрос, то mysql_insert_id ничего путного не вернёт

    ЗЫ
    но я могу и ошибаться
     
  9. ты ошибаешься.
     
  10. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Попутно спрошу тебя, потому как на момент нет возможности проверить:
    Что вернет такой запрос:
    [sql]INSERT INTO `table` VALUES (null, "Abc"), (null, "Def");
    SELECT LAST_INSERT_ID();[/sql]

    ID самой последней по списку записи?
     
  11. он вернет
    это очевидно даже из названия ;)
     
  12. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    Есть подозрение что mysql_insert_id использует [sql]SELECT LAST_INSERT_ID();[/sql]
     
  13. orange

    orange Активный пользователь

    С нами с:
    10 май 2007
    Сообщения:
    25
    Симпатии:
    0
    странно :(
    просто был случай такой
    1 сначала идёт инсерт;
    2 после какой запрос, то ли на выборку, то ли на обновление;
    3 далее шёл mysql_insert_id
    так вот - mysql_insert_id помоему ничего не возравщал, из за этого и происходил глюк в программе

    заменил mysql_insert_id на mysql_query("SELECT LAST_INSERT_ID()") - и в результате получил то что нужно было - последний ID

    как вариант пробовал строку 3 поставить после 1-ой, сразу после инсерта - то же работало. Отсюда сделал вывод, что mysql_insert_id надо использовать сразу после инсерта
     
  14. Почти. Они юзают строенную в клиентскую либу функцию last_insert_id()