Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Занесение данных одним запросом в 2 таблицы 
:(
    Опции темы
Alexzander
Дата 15.11.2005, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 25.6.2005

Репутация: нет
Всего: нет



Проблема в следующем:
есть 2 таблицы: таблица каталога ссылок и таблица описаний каждой из ссылок.
Код

mysql> describe linkdescr;
+------------+------------+------+-----+---------+-------+
| Field      | Type       | Null | Key | Default | Extra |
+------------+------------+------+-----+---------+-------+
| link_id    | tinyint(4) |      | PRI | 0       |       |
| link_descr | text       | YES  |     | NULL    |       |
+------------+------------+------+-----+---------+-------+

mysql> describe links;
+-------------------+--------------+------+-----+---------+----------------+
| Field             | Type         | Null | Key | Default | Extra          |
+-------------------+--------------+------+-----+---------+----------------+
| link_id           | tinyint(4)   |      | PRI | NULL    | auto_increment |
| link_name         | varchar(128) | YES  |     | NULL    |                |
| link_url          | varchar(128) | YES  | MUL | NULL    |                |
| cat_id            | tinyint(4)   |      |     | 0       |                |
| group_id          | tinyint(4)   |      |     | 0       |                |
| link_add_date     | int(10)      |      |     | 0       |                |
| link_click_amount | tinyint(4)   |      |     | 0       |                |
+-------------------+--------------+------+-----+---------+----------------+


вопрос в том, возможно ли одновременно (одним запросом) добавить новую запись в таблицу ссылок (links) и таблицу описаний (linkdescr).

Вот последовательность действий, которая должна быть проделана:
1. занести новую запись в таблицу links, её автоматически присвоится id (MAX( link_id)+1)
2. в таблицу linkdescr занести новую запись, при этом поле link_id должно содержать id только что занесенной ссылки.

проблема, конечно, может быть решена и поочередным выполнением insert, select и снова insert, но, возможно, есть более "красивый" способ?

ЗЫ. сервер 4.0.26

PM MAIL   Вверх
Ignat
Дата 15.11.2005, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: 21
Всего: 73



Цитата(Alexzander @ 15.11.2005, 14:30)
сервер 4.0.26

В один запрос не выйдет, два можно.
Код

INSERT INTO `links` .... VALUES ...;
INSERT INTO `linkdescr`(`link_id`, `link_descr`) VALUES (LAST_INSERT_ID(), 'описание');



--------------------
Теперь при чем :P
PM   Вверх
Kesh
Дата 15.11.2005, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



Можешь транзакции использовать...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Bose
Дата 16.11.2005, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 1
Всего: 51



Цитата(Kesh @ 15.11.2005, 18:19)
Можешь транзакции использовать...

Не "можешь"... а обязательно используй! или вручную проверяй, если первый запрос прошёл без ошибок, только тогда выполняй второй.

PM MAIL WWW Skype   Вверх
Alexzander
Дата 17.11.2005, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 25.6.2005

Репутация: нет
Всего: нет



Такой вопрос... LAST_INSERT_ID() считается для конктетного соединения с базой или вообще? Я хочу сказать, что не может ли получиться так, что между первым и вторым запросом другая копия скрипта, выполнив первый запрос, изменит значение LAST_INSERT_ID() для первой копии?
PM MAIL   Вверх
Ignat
Дата 17.11.2005, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: 21
Всего: 73



Цитата(Alexzander @ 17.11.2005, 15:52)
изменит значение LAST_INSERT_ID() для первой копии?

Изменит. Чтобы это избежать - LOCK TABLE.


--------------------
Теперь при чем :P
PM   Вверх
DENNN
Дата 17.11.2005, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 2
Всего: 43



Цитата(Ignat @ 17.11.2005, 16:16)
Цитата (Alexzander @ 17.11.2005, 15:52)
изменит значение LAST_INSERT_ID() для первой копии?

Изменит. Чтобы это избежать - LOCK TABLE.

Не изменит. Переменная LAST_INSERT_ID хранится на уровне соединения и на уровне соединиения обновляется после каждого запроса. Так что в пределах использования одного хендла соединения возвращается ПОСЛЕДНЕЕ значение автоинкремента, измененное при помощи УКАЗАННОГО хендла. То есть последнее изменение для твоего соединения, но не обязательно последнее для всей БД в целом.

Это сообщение отредактировал(а) DENNN - 17.11.2005, 18:27
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0451 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.