![]() |
|
Модераторы: skyboy |
![]()
|
|
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: нет Всего: 61 |
Привет, есть база в которой несколько таблиц. Мне нужно внести данные, полученные из формы сразу в несколько таблиц, т.е. эти данные разбиваются на несколько таблиц. Как лучше сделать такую вставку??? Допустим есть переменная $sql, генерирую запрос:
Или таким образом:
Или может есть ещё какой нить способ??? Вобщем нужен совет. Заранее спасибо, Денис. Это сообщение отредактировал(а) korob2001 - 15.5.2005, 11:13 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 15 Всего: 54 |
Если возможно, то такие вещи лучше делать одной транзакцией...
-------------------- ![]() |
|||
|
||||
| Mal Hack |
|
||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
MySQL ??? Дык вроде только в 5.
Такой запрос через mysql_query не пройдет. |
||||
|
|||||
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: нет Всего: 61 |
Как я понимаю, это из-за того, что я соединил все эти запросы один и между ними поставил ';', т.е. получается запрос примерно такого вида:
Так нельзя делать??? Ну собственно ещё вопрос на засыпку. Например когда я делаю запись в файл, мне нужно заблокировать его. Как быть с блокировкой в MySQL??? Это сообщение отредактировал(а) korob2001 - 15.5.2005, 12:45 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 15 Всего: 54 |
Mal Hack Да нет... транзакции вроде еще и в 4-ке есть... только там нужно хранилище не MyISAM а InnoDB
-------------------- ![]() |
|||
|
||||
| Kurt |
|
|||
|
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: 1 Всего: 36 |
Поясни вопрос. Тебя интересует блокировка таблицы MySQL? Ну, так на время выполнения операций изменения данных (insert, update и т.п.) таблица автоматически блокируется. Можно блокировать вручную. -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: нет Всего: 61 |
Привет! Вобщем у меня есть 5 таблиц, все таблицы заполняются из одной большой формы, другими словами мне нужно как-то сделать так, что бы записи делались в них синхронно. Что бы не получилось так, что в одну таблицу запись добавится, а в другую нет. Мне нужно связать Id всех этих таблиц и как-то заблокировать их, что бы либо запись добавилась во все таблицы, либо не добавилась ни в одну из них. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 15 Всего: 54 |
korob2001 Это есть транзакция... То есть либо все - либо ничего...
-------------------- ![]() |
|||
|
||||
| Kurt |
|
||||
|
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: 1 Всего: 36 |
Как уже говорилось, транзакции поддерживаются только форматом BDB или InnoDB, для остальных (в том числе и для типа по умолчанию MyISAM) - нет.
korob2001 Если у тебя BDB или InnoDB, можешь сделать так:
Для остальных форматов таблицы можно заблокировать так:
при этом ключевое слово WRITE полностью блокирует таблицу, если поставишь READ - для других юзеров будет разрешено чтение (но не запись!). -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
||||
|
|||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Интересно, что будет при обвале скрипта посередь выполнения? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Kurt |
|
|||
|
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: 1 Всего: 36 |
Согласен. Плохо будет. ОЧЕНЬ плохо.
Честно говоря, я никогда вручную не лочил таблицы. Но другого выхода для такого формата таблиц я не знаю. -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Стандартный алгоритм... Temporary Tables + Garbage Table Конечно при этом придется мириться с тайм-аутом поступления изменений... Добавлено @ 18:29 Есть еще один выход - таблица резервирования ID-ов. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Kurt |
|
|||
|
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: 1 Всего: 36 |
Поясни, пожалуйста, что ты имеешь ввиду. Ну или ссылку кинь. Буду знать. -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
|||
|
||||
| Illuminaty |
|
|||
![]() /*Антон Захаров*/ ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1238 Регистрация: 19.3.2005 Где: Россия, Казань Репутация: 3 Всего: 56 |
||||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Kurt
Проблема при добавлении в связанные таблицы при отсутствии транзакций - это а) контроль 100% выполнения всех запросов; б) согласованность резервирования ID-ов. Суть: имеется специальная таблица, в которой для каждой из изменяемых таблиц есть поле соотв. ID-a. При необходимости занесения связных данных выбор ID-ов длЯ каждой из таблиц производится по признаку отсутствия как в самой таблице, так и в таблице резервирования. Когда массив ID-ов сформирован, он записывается в таблицу. Одним запросом. При высокой интенсивности обращений тут же проводится обратный контроль. Все, выделенные ID-ы уже никто не использует, и можно смело приступать к изменениям. Если все изменения прошли нормально - запись зарезервированных ID-ов удаляется. Именно с этого момента сразу все записи становятся доступны к использованию - до этого они считаются недействительными. И клиентская часть при выборках дополнительно контролирует, что ID-ы выбранных записей не фигурируют в таблице резервирования
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |