Получить идентификатор автоматического увеличения из базы данных mysql

У меня есть база данных с полем автоматического увеличения. Я хочу получить значение столбца автоматического увеличения всякий раз, когда я вставляю запись в базу данных. Я использую mysql в качестве базы данных и PHP в качестве языка программирования. Я пытался использовать функцию mysql_insert_id(), но тогда она не подходит, когда в один и тот же момент времени происходит большое количество вставок.

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


person KOR    schedule 22.07.2012    source источник


Ответы (5)


Использование mysql_insert_id() должно быть безопасным, так как оно вернет последнее вставленное значение AI для текущего соединения (см. php.net). Таким образом, пока вы вызываете метод сразу после запроса INSERT в своем сценарии, не будет никаких условий гонки, даже если ваш сценарий выполняется одновременно несколько раз.

person florian h    schedule 22.07.2012
comment
Это именно то, что я искал. Спасибо за вашу помощь. :) - person KOR; 23.07.2012

для одной вставки вы можете сделать это в одном операторе, чтобы убедиться, что вы получите правильное значение

Псевдокод:

$query = "INSERT INTO TABLE1 VALUES(null, 'test')";
$id = mysql_execute("$query; SELECT LAST_INSERT_ID();"

Другим способом может быть установка идентификаторов вручную.

допустим, вы хотите добавить 1000 строк

1. query current ai value and store value

2. alter table set ai value = current + 1000;

3. make your inserts with setting ai value manually

   INSERT INTO TABLE1 VALUES ($id, 'test$id');
person Jürgen Steinblock    schedule 22.07.2012

Используйте uniqid() для имени файла. «Получает уникальный идентификатор с префиксом на основе текущего времени в микросекундах».

Посмотрите здесь php.net/manual/en/function.uniqid.php

person Luc CR    schedule 22.07.2012

вы также можете сгенерировать уникальный номер с помощью uniqid(), вставить его в таблицу и использовать то же самое для имени файла.

http://php.net/manual/en/function.uniqid.php

person FatalError    schedule 22.07.2012

Альтернативный способ получить идентификатор последней вставки с помощью SQL:

SELECT id FROM table ORDER BY id DESC LIMIT 1
person mogelbrod    schedule 22.07.2012
comment
SELECT MAX(id) FROM table; короче и без сортировки. - person florian h; 22.07.2012
comment
Этот метод небезопасен, когда параллельное соединение вставляет собственные строки. - person Shlomi Noach; 22.07.2012
comment
но это дополнительный оператор sql, и он уже сказал, что беспокоится о производительности. - person Nikola; 22.07.2012
comment
Все ваши точки действительны, я согласен, что это не предпочтительный способ получить значение. - person mogelbrod; 22.07.2012