Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вопрос по insert
 
 автор: AgentZ   (21.07.2008 в 11:09)   письмо автору
 
 

Привет всем. Я работаю с mysql не так то и давно, и вот появился такой вопрос:
Есть запрос:

INSERT INTO CoffeeOrder(id, order_date, name, delivery_address, cost) value((SELECT max(co.id) + 1 FROM CoffeeOrder co), '2008-11-11', 'address', 156)

когда он выполняется в таблицу CoffeeOrder добавляется новая запись с id равным максимальному + 1. После запроса я хочу узнать id который был установлен у этой записи. Как это сделать?
И ещё поля id нельзя задать auto_increment, при создании таблицы.

Windows xp sp2, MySQL 5.0.45
Зрание спасибо.

   
 
 автор: cheops   (21.07.2008 в 11:26)   письмо автору
 
   для: AgentZ   (21.07.2008 в 11:09)
 

Осуществите запрос
SELECT max(co.id) FROM CoffeeOrder co

   
 
 автор: sms-send   (21.07.2008 в 15:54)   письмо автору
 
   для: AgentZ   (21.07.2008 в 11:09)
 

>И ещё поля id нельзя задать auto_increment, при создании таблицы.
>


А в чём проблема?

   
 
 автор: AgentZ   (21.07.2008 в 22:12)   письмо автору
 
   для: sms-send   (21.07.2008 в 15:54)
 

Просто метод содержащий данный запрос может вызываться в несколько потоков. И после запроса выполнения "INSERT ..." не гарантируется, что будет сразу выполнен "SELECT max(co.id) FROM CoffeeOrder co", т.е. в другом потоке тоже может выполнится "INSERT ...". Мне же нужно последовательное выполнени. Может мне таблицу лочить? И вообще, есть ли выход из данной ситуации?

   
 
 автор: sms-send   (21.07.2008 в 23:46)   письмо автору
 
   для: AgentZ   (21.07.2008 в 22:12)
 

LOCK TABLES `CoffeeOrder` WRITE
// запросы
UNLOCK TABLES

   
 
 автор: Trianon   (22.07.2008 в 00:37)   письмо автору
 
   для: AgentZ   (21.07.2008 в 22:12)
 

еще раз.
Почему это поле нельзя сделать auto_increment?
Все проблемы тут же бы и ушли.
Естественно, применять придется LAST_INSERT_ID() или mysql_insert_id()
SELECT MAX(id) - Вам ничего определенного не вернет.

   
 
 автор: Valick   (22.07.2008 в 01:05)   письмо автору
 
   для: AgentZ   (21.07.2008 в 22:12)
 

Как вариант, можете INSERTом застолбить ID , а затем вмеcто INSERT использовать UPDATE

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования