Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Можно ли в MYSQL выполнить сразу 2 запроса? / 17 сообщений из 17, страница 1 из 1
25.01.2015, 14:17:28
    #38862594
Ramzay_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в MYSQL выполнить сразу 2 запроса?
Нужно сделать в MySQL следующее:
Код: sql
1.
2.
delete from Translate where rId=2
delete from RWords where id=2



Естественно, если один из запросов не отработает, то ничего в базе не должно измениться.

Можно ли сделать это за одно обращение к базе, например, разделив запросы каким-либо символом или нужно открывать транзакцию, делать один, потом второй запрос и закрывать транзакцию?
Если можно - примерчик.
...
Рейтинг: 0 / 0
25.01.2015, 16:07:49
    #38862631
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в MYSQL выполнить сразу 2 запроса?
Ramzay_, синтаксис в этом случае похож на JOIN.
в DELETE FROM перечисляете таблицы из которых удалить, а потом в USING указываете как их объединить.
Почитайте в документации DELETE Multiple-table syntax


авторЕстественно, если один из запросов не отработает, то ничего в базе не должно измениться.
И по каким же причинам вы предполагаете что не отработает?

Конечно, myisam гарантии не даст. При внештатной ситуации оператор может прерваться в любой момент и оставить таблицы не связанными или сломанными. Если вас это волнует - делайте транзакции.
...
Рейтинг: 0 / 0
25.01.2015, 17:36:33
    #38862644
Ramzay_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в MYSQL выполнить сразу 2 запроса?
Netwind, ни о каких мультитабличных запросах DELETE речь не идет. Задача стоит следующим образом:
нужно выполнить один запрос, который удалит несколько строк из таблицы Translate, затем, сразу же, должен отработать второй запрос, который удалит строчку из таблицы RWords. В случае ошибки, в базе не должно произойти никаких изменений.
Код: sql
1.
2.
delete from Translate where rId=2
delete from RWords where id=2


Оба запроса посылаются из программы, написанной на чем-угодно.
Если бы такая задача стояла, например, в базе MSSQL, то решалась бы она приблизительно так:
Код: sql
1.
2.
3.
4.
ADOQuery1->SQL->Text=
"delete from Translate where rId=2;\
 delete from RWords where id=2;";
ADOQuery1->ExecSQL();



Т.е. пишется один запрос, затем точка с запятой и второй запрос. MSSQL нормально отрабатывает. В MySQL такой фокус не проходит. Каждый из запросов в отдельности отрабатывает нормально. Если пишешь сразу два запроса - выдается ошибка.
Как можно решить эту проблему?
...
Рейтинг: 0 / 0
25.01.2015, 17:52:48
    #38862650
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в MYSQL выполнить сразу 2 запроса?
Ramzay_, вы на вопрос не ответили. В случае какой ошибки ? Это вы где-то в интернете прочитали что "база данных должна быть надежна" или есть осознанное понимание, что вам это необходимо ?

>MSSQL нормально отрабатывает. В MySQL такой фокус не проходит.
Ну вот и купите еще пару лицензий MSSQL, да выпейте чаю на сдачу.
Разные программы работают по-разному. Просто точка с запятой не будет работать. В клиентском протоколе есть способ запихнуть и два запроса и получить два ответа за один вызов, но не вижу чтобы это вам было нужно.
...
Рейтинг: 0 / 0
25.01.2015, 18:03:06
    #38862652
Ramzay_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в MYSQL выполнить сразу 2 запроса?
Netwind, отвечаю на ваш вопрос.
Ошибка может быть любой. Например, база данных не даст удалить запись из одной таблицы, по причине наложенных не нее ограничений.

Хотелось бы узнать, такое как я хочу сделать, вообще возможно?
...
Рейтинг: 0 / 0
25.01.2015, 18:11:00
    #38862654
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в MYSQL выполнить сразу 2 запроса?
Ramzay_, любой - это не формулировка.
Например, я считаю допустимым такое странное решение, как объединять в один мультитабличный delete-запрос (который на самом деле решает вашу проблему если бы вы внимательно над ним подумали) если предполагается эксплуатация продукта на php с максимальной "выживаемостью" дешевом хостинге с myisam. Хостинг убьет скрипт, а запрос не убьет. Целостность данных не нарушится.
Совершенно другое дело, когда предполагается серьезный подход к хранению, отказам оборудования и , соответственно, транзакциям.

Если не мудрствовать и в общем случае - просто сделайте транзакции в innodb.
...
Рейтинг: 0 / 0
25.01.2015, 19:12:34
    #38862671
Ramzay_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в MYSQL выполнить сразу 2 запроса?
netwind,

Код: sql
1.
2.
3.
4.
5.
6.
START TRANSACTION;

  Delete from Transaction where Rid=1;
  Delete from Rword       where id=1;

COMMIT; 



не работает. Наверно, что -то не так.
...
Рейтинг: 0 / 0
26.01.2015, 06:51:52
    #38862842
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в MYSQL выполнить сразу 2 запроса?
Ramzay_не работает.
...
Рейтинг: 0 / 0
26.01.2015, 09:02:42
    #38862883
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в MYSQL выполнить сразу 2 запроса?
Ramzay_MSSQL нормально отрабатывает. В MySQL такой фокус не проходит. Каждый из запросов в отдельности отрабатывает нормально. Если пишешь сразу два запроса - выдается ошибка.
Как можно решить эту проблему?
Вопросы к библиотеке доступа или драйверу доступа.

Ramzay_Netwind, ни о каких мультитабличных запросах DELETE речь не идет. Задача стоит следующим образом:
нужно выполнить один запрос, который удалит несколько строк из таблицы Translate, затем, сразу же, должен отработать второй запрос, который удалит строчку из таблицы RWords. В случае ошибки, в базе не должно произойти никаких изменений.
Речь идёт именно о мультитабличном удалении. И Ваше упорное нежелание прочитать документацию и понять то, что там написано - не аргумент.
...
Рейтинг: 0 / 0
28.01.2015, 07:55:20
    #38865015
Ramzay_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в MYSQL выполнить сразу 2 запроса?
Ой, чувствую себя как оплеваный.
Код: sql
1.
2.
3.
4.
5.
6.
START TRANSACTION;

  Delete from Transaction where Rid=1;
  Delete from Rword       where id=1;

COMMIT; 


Ошибка выглядит так же как и без транзакций:
Код: sql
1.
MySQL syntax error


Хоть ссылку дайте, где почитать...
...
Рейтинг: 0 / 0
28.01.2015, 07:58:12
    #38865017
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в MYSQL выполнить сразу 2 запроса?
Ramzay_Хоть ссылку дайте, где почитать...AkinaВопросы к библиотеке доступа или драйверу доступа.В одбц, например, надо включить "allow multiple statements".
...
Рейтинг: 0 / 0
28.01.2015, 09:21:56
    #38865060
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в MYSQL выполнить сразу 2 запроса?
Вот иной раз думаешь, что человек тупой, а он на самом деле просто слишком упорный...
Код: sql
1.
2.
3.
DELETE Transaction.*, Rword.*
FROM Transaction, Rword
WHERE Transaction.Rid=1 AND Rword.id=1;
...
Рейтинг: 0 / 0
28.01.2015, 18:52:13
    #38865866
Ramzay_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в MYSQL выполнить сразу 2 запроса?
AkinaВот иной раз думаешь, что человек тупой, а он на самом деле просто слишком упорный...

Ну че сразу обзываться? Да тупой. За тем на форум люди и хотят, что бы ума набираться.

Код: sql
1.
2.
3.
DELETE Transaction.*, Rword.*
FROM Transaction, Rword
WHERE Transaction.Rid=1 AND Rword.id=1;



Данный код на 100% решает поставленную задачу. Спасибо.

Задавая вопрос мне хотелось бы выяснить еще одну проблему.
Можно ли за одно обращение к базе из внешней программы выполнить сразу 2 запроса. Например:

Код: sql
1.
2.
delete from Translate where rId=2
select * from Translate


Каждый из запросов в отдельности выполняется без ошибок. Можно ли выполнить сразу 2 запроса? 2 тех запроса, которые показаны в примере или каких-либо других. При выполнении сразу 2-запросов выдается
Код: sql
1.
MySQL syntax error

Установка точки с запятой между запросами не помогает.
...
Рейтинг: 0 / 0
28.01.2015, 19:22:33
    #38865896
Ramzay_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в MYSQL выполнить сразу 2 запроса?
tanglirВ одбц, например, надо включить "allow multiple statements".
Включил, получилось выполнить два запроса Delete. Ура.

Однако, если выполнять два запроса подряд Select а потом Delete то набор данных не возвращается. Почему не пойму...
...
Рейтинг: 0 / 0
28.01.2015, 21:06:25
    #38865969
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в MYSQL выполнить сразу 2 запроса?
Ramzay_Ну че сразу обзываться? Да тупой. За тем на форум люди и хотят, что бы ума набираться.
Тебе сказали про многотабличное удаление? сказали... причём не один раз. Ума набираться - это прочитать справку и попытаться понять, почему был дан такой совет. Прочитал, но не понимаешь - предметно спроси. А что мы видим? облыжное утверждение, что о многотабличном удалении речи не идёт, а потом - молчаливый игнор. Так что совсем даже не сразу...
...
Рейтинг: 0 / 0
28.01.2015, 21:07:36
    #38865971
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в MYSQL выполнить сразу 2 запроса?
Ramzay_если выполнять два запроса подряд Select а потом Delete то набор данных не возвращается. Почему не пойму...Потому что возвращается как минимум ТРИ набора данных. Изволь перебрать коллекцию.
...
Рейтинг: 0 / 0
30.01.2015, 00:29:37
    #38867322
Ramzay_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в MYSQL выполнить сразу 2 запроса?
AkinaИзволь перебрать коллекцию.
Извини, до коллекции я пока не дошел...
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Можно ли в MYSQL выполнить сразу 2 запроса? / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]