| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > получить id на упреждение |
| Автор: bars80080 9.8.2010, 15:24 |
| возникла такая задачка: при вставке записи в БД (mysql) надо одно поле заполнить неким параметром, вычисление которого основывается на id этой записи. не сложно после запроса insert... запросить идентификатор: select last_insert_id(), а затем апдейтом обновить это самое поле но ведь текущее значение автоинкремента можно получить из show table status будет ли получение значения id заранее чревато ошибкой, когда между show table status и insert проскочит запрос другого пользователя? или просто не заморачиваться и делать традиционно insert, select last_insert_id(), update ? |
| Автор: ksnk 9.8.2010, 16:00 |
| bars80080, А к чему такие оптимизации? типа, хочется все сделать "одним запросом"? Нельзя, так как между любыми двумя запросами из php в mysql МОГУТ проскочить сколь угодно много других запросов от других процессов. Варианты: -- залочить таблицу на добавление записей, и сделать грязное дело ервым способом... -- использовать хранимую процедуру, которая сама сделает обновление таблицы после вставки данных. Хотя выигрыш от хранимых процедур может и не впечатлить ;) тут придется работать по второму способу. Хотя вместе с локом может проити и первый. |
| Автор: ksnk 9.8.2010, 18:55 |
| bars80080, я путаю первый и второй Первый способ по моему - это -- залочить таблицу на запись, -- узнать номер следующей вставляемой записи с помощью show table status -- и смонтировать нужный запрос и выполнить его. а второй - это обычный, через last_insert_id |
| Автор: SelenIT 9.8.2010, 23:39 |
| а триггером это не сделается? |
| Автор: bars80080 10.8.2010, 10:48 |
| триггер мы не потянем, да и не нужно наверное в такой мизерной задаче лочить - это лишние запросы, хотя и попроще метод, но не будем искать лишних приключений спасибо |