|
|
|
| Привет всем. Я работаю с 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
Зрание спасибо. | |
|
|
|
|
|
|
|
для: AgentZ
(21.07.2008 в 11:09)
| | Осуществите запрос
SELECT max(co.id) FROM CoffeeOrder co
|
| |
|
|
|
|
|
|
|
для: AgentZ
(21.07.2008 в 11:09)
| | >И ещё поля id нельзя задать auto_increment, при создании таблицы.
>
А в чём проблема? | |
|
|
|
|
|
|
|
для: sms-send
(21.07.2008 в 15:54)
| | Просто метод содержащий данный запрос может вызываться в несколько потоков. И после запроса выполнения "INSERT ..." не гарантируется, что будет сразу выполнен "SELECT max(co.id) FROM CoffeeOrder co", т.е. в другом потоке тоже может выполнится "INSERT ...". Мне же нужно последовательное выполнени. Может мне таблицу лочить? И вообще, есть ли выход из данной ситуации? | |
|
|
|
|
|
|
|
для: AgentZ
(21.07.2008 в 22:12)
| | LOCK TABLES `CoffeeOrder` WRITE
// запросы
UNLOCK TABLES | |
|
|
|
|
|
|
|
для: AgentZ
(21.07.2008 в 22:12)
| | еще раз.
Почему это поле нельзя сделать auto_increment?
Все проблемы тут же бы и ушли.
Естественно, применять придется LAST_INSERT_ID() или mysql_insert_id()
SELECT MAX(id) - Вам ничего определенного не вернет. | |
|
|
|
|
|
|
|
для: AgentZ
(21.07.2008 в 22:12)
| | Как вариант, можете INSERTом застолбить ID , а затем вмеcто INSERT использовать UPDATE | |
|
|
|