У меня есть веб-приложение, которое было записано учитывая, что автоматическая фиксация включена на базе данных, таким образом, я не хочу вносить любые изменения там. Однако вся документация, которую я могу найти только, кажется, говорит об использовании init_connect на базе данных, т.е. глобальной установке для всех соединений клиента.
Существует ли способ установить autocommit=0 как раз в то самое время, когда, работая mysql на командной строке Linux (не имея необходимость ввести его в каждый раз)?
Возможно, лучший способ - написать скрипт, который запускает клиент командной строки mysql и затем автоматически выполняет все sql, которые вы хотите, прежде чем передать управление вам.
linux поставляется с приложением под названием 'expect'. оно взаимодействует с оболочкой таким образом, что имитирует нажатие клавиш. его можно настроить на запуск mysql, подождать, пока вы введете пароль. выполнить дальнейшие команды, такие как SET autocommit = 0;
затем перейти в интерактивный режим, чтобы вы могли выполнить любую команду.
подробнее о команде SET autocommit = 0;
смотрите... http://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html
Я использую expect для входа в утилиту командной строки, в моем случае она запускает ssh, подключается к удаленному серверу, запускает приложение, вводит мое имя пользователя и пароль, затем передает управление мне. Это экономит мне кучу текста :)
http://linux.die.net/man/1/expect
DC
Expect script provided by Michael Hinds
spawn /usr/local/mysql/bin/mysql
expect "mysql>"
send "set autocommit=0;\r"
expect "mysql>" interact
expect довольно мощный инструмент и может сделать жизнь намного проще, как в этом случае.
если вы хотите, чтобы скрипт запускался без вызова expect, используйте строку shebang
вставьте ее в качестве первой строки вашего скрипта (подсказка: используйте which expect
, чтобы найти расположение вашего исполняемого файла expect)
#! /usr/bin/expect
затем измените разрешения вашего скрипта с...
chmod 0744 myscript
затем вызовите скрипт
./myscript
DC
Это можно сделать тремя разными способами:
Перед выполнением INSERT
всегда выпускайте оператор BEGIN;
. Это отключит автокоммиты. Вам нужно будет выполнить COMMIT;
, когда вы захотите, чтобы ваши данные сохранились в базе данных.
Используйте autocommit=0;
каждый раз, когда вы устанавливаете соединение с базой данных.
Для глобальной настройки добавьте переменную autocommit=0
в конфигурационный файл my.cnf
в MySQL.
Вы имеете в виду текстовую консоль mysql? Тогда:
START TRANSACTION;
...
your queries.
...
COMMIT;
Вот что я рекомендую.
Однако если вы хотите избежать ввода этого каждый раз, когда вам нужно выполнить подобный запрос, добавьте следующее в раздел [mysqld] вашего файла my.cnf.
init_connect='set autocommit=0'
Это установит autocommit
выключенным для каждого клиента.