2014-01-06 2 views
1

В моем приложении я хочу сделать что-то вродеЯвляются ли транзакции MySql взаимоисключающими?

1) INSERT INTO APPLICATION VALUES(...); 

И тогда я хочу, чтобы получить идентификатор (который AUTO_INCREMENT) последней записи, вставленной в таблицу ЗАЯВКИ и хранить его в другой таблице, как ...

2) $last_rec = $this->con->query("SELECT ID FROM APPLICATION ORDER BY ID DESC LIMIT 1"); 
3) INSERT INTO INFO(A_ID, ...) VALUES($last_rec, ...); 

Я использую транзакцию и все работает нормально, но я не уверен, если другая транзакция может вставить строку в ЗАЯВКИ только после шага-1 является полным, если это происходит, то неправильно APPLICATION.ID будет храниться в INFO.A_ID.

Любые предложения относительно того, как я должен обращаться с такой ситуацией?

ответ

2

Прочитайте это: http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

«За LAST_INSERT_ID(), самым последнее генерироваться ID поддерживаются на сервере на основе каждого соединения Это не изменено другим клиент

Это даже не изменилось.. если вы обновляете другой AUTO_INCREMENT столбец с немагическим значением (то есть значение, которое не NULL и не 0).

Использование LAST_INSERT_ID() и AUTO_INCREMENT колонны одновременно с Умножить e клиенты совершенно верны. "

+0

Благодаря @gfrobenius, он должен решить эту проблему :) – smit

1

Я настоятельно рекомендую против LAST_INSERT_ID(), как это может бросить неправильный идентификатор в случае одновременных вставок в таблице ...

Например ... если у вас есть 2 одновременных транзакций, и вы хотите получить первый из идентификатора 2 сделки ..... last_insert_id() бы не смог здесь, как это не знает, какой была последняя правильная вставка

использовать вместо mysqli->insert_id

$result = $mysqli->query(/*insert query here */); 
echo 'The ID is: '.$mysqli->insert_id; 

Ref: mysqli.insert-id

+0

Нет, они точно так же. LAST_INSERT_ID() привязана к сеансу и никогда не будет давать значение, сгенерированное другим сеансом. –

+0

просто сомнение .. возможно ли, что 'user' может сделать 2 транзакции в одном сеансе ???? : | – NoobEditor

+0

Да, один сеанс может состоять из нескольких транзакций в последовательном порядке, но это не имеет значения. MySQL сообщает о последнем значении автоинкремента, сгенерированном в текущем сеансе, независимо от транзакций. –

Смежные вопросы