|
Тема |
Re: Insert в 2 таблици с една заявка [re: zakysal] |
|
Автор |
salle (един такъв) |
|
Публикувано | 21.03.07 01:12 |
|
|
Стандартно решение няма както wqw ти каза.
За всеки сървър си има съответното решение, но специфично и неработещо при другите.
В MySQL решението е да използваш LAST_INSERT_ID():
INSERT INT t1 .....;
INSERT INTO t2 (t1_id, .... )VALUES(LAST_INSERT_ID() ....
LAST_INSERT_ID() ти гарантира стойността на auto increment вмъкната от текущата сесия дори и да има други паралелно работещи сесии за разлика от MAX(id).
Едно по-генерално решение поне на теория е да заключваш първата таблица за писане, но това също не всеки сървър ще ти го позволи.
Също на теория при максималното ниво на изолация на транзакции (което също варира) би трябвало да можеш да изпълниш:
START TRANSACTION;
SELECT MAX(ID) ...
INSERT ...
и да разчиташ, че нивото на изолация ти гарантира нова стойност MAX+1
Само, че тове е в "сивата област" където обитават фантоми и други подобни.
Изобщо ако ти трябва преносимо решение което да работи независимо от сървъра по-добре се ориентирай към решение от страната на клиентското приложение.
Или още по-добре използвай уникални идентификатори в стил UUID() и подобни
и да е гарантирано, че никой
|
| |
|
|
|