значение автоинкремента

Ronnie

Новичок
может, не совсем в тему... у меня вопрос по LAST_INSERT_ID(), а скорее даже по mysql_insert_id. ИМХО, может возникнуть ситуация, что значение которое вернет mysql_insert_id может быть не актуальным. Вопрос в том как защититься от такой ситуации?
 

WP

^_^
Неактуальным = устаревшим? Никак, только если блокировать таблицы. Действительно, обрисуй ситуацию, обычно всё и так нормально.
 

Ronnie

Новичок
ну да неактуальным = устаревшим. допустим в скрипте я делаю подряд mysql_query('insert ...'); и mysql_insert_id(); или mysql_affected_rows();. а на моем сайте миллионы поситителей тысячи запросов insert, update, delete (- только для аффектед), и возникает ситуация что после выполнения insert и до выполнения mysql_insert_id() другая копия скрипта выполнит другой запрос на вставку или обновление, который сбросит (заменит) требуемые значения.
На сколько я понимаю количество измененных строк (affected_rows) и последнее значение автоинкремента (insert_id) это, грубо говоря, две переменные для каждой базы данных. По-этому блокировка таблицы тут не поможет. Хотелось бы придумать какое-нибудь програмное решение, не препятствующее выполнению селектов, типа мутекса: например, если необходимо выполнить insert можно перед этим попытаться открыть файл на запись, и если не получится то ждать до тех пор пока он не освободится, открыть, а после выполнения инсерта и получения insert_id и/или affected_rows закрыть файл. заранее спасибо за идеи.
 

Фанат

oncle terrible
Команда форума
другая копия скрипта выполнит другой запрос на вставку или обновление, который сбросит (заменит) требуемые значения.
а обновление-то ты к чему тут приплёл?
На сколько я понимаю количество измененных строк
понимать ничего не надо.
надо читать документацию.
 

Ronnie

Новичок
Фанат
а обновление-то ты к чему тут приплёл?
я "приплел" обновление к тому, что оно (обновление) влияет на на значение last_insert_id, и ты можешь проверить это на простом примере:
PHP:
   $connection = mysql_connect('...', '...', '...');
   mysql_select_db('test', $connection);
   mysql_query("INSERT INTO t1 (some) VALUES ('111') ");
   mysql_query("UPDATE t1 SET some='222' WHERE id=1");
   echo mysql_insert_id($connection);
или воспользоваться своим советом и почитать документацию
http://www.mysql.ru/docs/man/Miscellaneous_functions.html

насчет:
понимать ничего не надо.
с этим категорически не согласен по личным убеждениям

для тех кому интересен ответ на мой идиотский вопрос:
переменные эти создаются для каждого коннекта к базе и умерают когда он (коннект) закрывается... так что городить огороды с мутексами, хе-хе, тут я конечно погорячился... проблемы описанной мной не возникнет
 

Фанат

oncle terrible
Команда форума
у тебя было не "между", а "или".
но я рад, что ты разрешил для себя этот вопрос
 
Сверху