[d | an-b-bro-fr-gf-hr-l-m-maid-med-mi-mu-ne-o-old_o-p-ph-r-s-sci-sp-t-tran-tv-w-x | bg-vg | au-mo-tr | a-aa-abe-azu-c-dn-fi-hau-jp-ls-ma-me-rm-sos-tan-to-vn | misc-tenma-vndev | dev-stat]
[Burichan] [Futaba] [Gurochan] [Tomorrow] [Архив-Каталог-RSS] [Главная]

Файл: -(395 KB, 704x528)
395 No.3659216  

Ситуация такая: есть две таблицы, например
Таблица 1: id, значение
Таблица 2: id, id из первой таблицы, значение, еще какое-то значение.
Каким заклинанием вставить значения сразу в две таблицы, т.е. вставить новое значение в таблицу 1 и тут же вставить значение в таблицу 2, при этом использовав только что созданный id из таблицы 1?

>> No.3659219  

Скорее всего одним запросом нельзя, но можно обернуть несколько запросов в транзакцию.

>> No.3659234  

>>3659219
т.е алгоритм должен быть таким:
1) Вставить значение в таблицу 1
2) Найти в таблице 1 id вставленного значения
3) Вставить в значение в таблицу 2
Неужели не существует стандартных средств для этого? А если будет не две таблицы, а 3, 4 или более, не слишком ли этот алгоритм ресурсозатратным получается?

>> No.3659252  

>>3659234

>Найти в таблице 1 id вставленного значения

А зачем его забывать после шага 1?

>А если будет не две таблицы, а 3, 4 или более, не слишком ли этот алгоритм ресурсозатратным получается?

Вопрос к тому, кто так проектировал таблицы.

>> No.3659258  

>>3659252

>А зачем его забывать после шага 1?

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

>> No.3659264  

>>3659258
В этом случае возможна проблема при вставке значений из двух разных потоков, может выдать id не из того потока? Или такое невозможно?

>> No.3659267  

>>3659264

>The ID that was generated is maintained in the server on a per-connection basis. This means that the value returned by the function to a given client is the first AUTO_INCREMENT value generated for most recent statement affecting an AUTO_INCREMENT column by that client. This value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that each client can retrieve its own ID without concern for the activity of other clients, and without the need for locks or transactions.

Вообще мог бы и сам это всё нагуглить.




[d | an-b-bro-fr-gf-hr-l-m-maid-med-mi-mu-ne-o-old_o-p-ph-r-s-sci-sp-t-tran-tv-w-x | bg-vg | au-mo-tr | a-aa-abe-azu-c-dn-fi-hau-jp-ls-ma-me-rm-sos-tan-to-vn | misc-tenma-vndev | dev-stat]
[Burichan] [Futaba] [Gurochan] [Tomorrow] [Архив-Каталог-RSS] [Главная]