Forum Webscript.Ru
Общие => Базы данных => Тема начата: xRUSha от 23 Апреля 2003, 14:50:03
-
Существует ли в MySQL возможность откатить последнее действие. Я случайно сделал UPDATE без указания id и вся таблица (около 1000 записей).... ну в общем предел моих мечтаний это действие отменить
-
если есть дамп - восстанови оттуда.
-
а если нету
-
> а если нету
если ты транзакции не используешь, то нет - нету.
-
Если у тебя тип таблицы InnoDB или BDB - можно.
-
> Если у тебя тип таблицы InnoDB или BDB
точнее если он транзакции на них использует ;)
Сам по себе тип таблиц делать откат не позволяет ;)
-
fidget
Ну не буду же я ему мануал цитировать с его transational tables и non-transactional tables - все равно не поймет:)
-
А разве в MySQL вооще можно использовать транзакции. С какой версии и где об этом почитать.
-
xRUSha
на mysql.com в разделе документации с версии 4.1
-
> на mysql.com в разделе документации с версии 4.1
не путай народ :-Р
транзакции вообще-то давно есть ;)
в 3.23 таблицы BDB и InnoDB их очень даже поддерживают ;)
-
fidget
[off]ну я так - в общем говорил, не вдаваясь. и тем не менее на mysql.com в разделе документация все есть :)[/off]
-
[OFF]
ThE0ReTiC:
ну я так - в общем говорил,
типа что бы не ошибиться? ;)
[/OFF]
-
угу ;)
-
http://www.mysql.com/doc/ru/ANSI_diff_Transactions.html
-
Ниже описаны некоторые технические приемы работы с нетранзакционными таблицами:
....
Чтобы избежать применения ROLLBACK, можно использовать следующую стратегию:
Применить LOCK TABLES ... для блокирования всех таблиц, к которым необходим доступ.
Проверить условия.
Обновить, если все в порядке.
Использовать UNLOCK TABLES для освобождения произведенных блокировок.
Обычно этот метод обеспечивает намного более высокую скорость, чем использование транзакций с возможными откатами, хотя и не всегда. Это решение не годится только для одной ситуации - когда кто-либо уничтожает потоки посреди обновления. В этом случае все блокировки будут сняты, но некоторые обновления могут не выполниться.
-
Alexandr, тут немного другая ситуация, чем та, которую ты привел из мануала.
В примере из мануала сначала выполняется проверка, а потом проводится обновление. тут же обновление уже сделано и без транзакций откатить этот запрос невозможно.
-
Я в том смысле, что можно переделать скрипт и обойтись без транзакций.
-
Чтобы избежать применения ROLLBACK, можно использовать следующую стратегию:
Применить LOCK TABLES ... для блокирования всех таблиц, к которым необходим доступ.
Проверить условия.
Обновить, если все в порядке.
Использовать UNLOCK TABLES для освобождения произведенных блокировок.
Проверить условия? А что имеется ввиду, и как это сделать
-
> Я в том смысле, что можно переделать скрипт и обойтись без транзакций.
не всегда ;) собственно то, что я тебе и говорила уже. LOCK TABLES дает тебе гарантию, что никто другой не может модифицировать твою таблицу до тех пор , пако ты ее не разлочишь. Но ты не сможешь откатить действие.