Как я выключаю автоматическую фиксацию для клиента MySQL?

У меня есть веб-приложение, которое было записано учитывая, что автоматическая фиксация включена на базе данных, таким образом, я не хочу вносить любые изменения там. Однако вся документация, которую я могу найти только, кажется, говорит об использовании init_connect на базе данных, т.е. глобальной установке для всех соединений клиента.

Существует ли способ установить autocommit=0 как раз в то самое время, когда, работая mysql на командной строке Linux (не имея необходимость ввести его в каждый раз)?

33
задан Michael Hinds 17 February 2010 в 12:21
поделиться

3 ответа

Возможно, лучший способ - написать скрипт, который запускает клиент командной строки 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

26
ответ дан 27 November 2019 в 18:07
поделиться

Это можно сделать тремя разными способами:

  1. Перед выполнением INSERT всегда выпускайте оператор BEGIN;. Это отключит автокоммиты. Вам нужно будет выполнить COMMIT;, когда вы захотите, чтобы ваши данные сохранились в базе данных.

  2. Используйте autocommit=0; каждый раз, когда вы устанавливаете соединение с базой данных.

  3. Для глобальной настройки добавьте переменную autocommit=0 в конфигурационный файл my.cnf в MySQL.

23
ответ дан 27 November 2019 в 18:07
поделиться

Вы имеете в виду текстовую консоль mysql? Тогда:

START TRANSACTION;
  ...
  your queries.
  ...
COMMIT;

Вот что я рекомендую.

Однако если вы хотите избежать ввода этого каждый раз, когда вам нужно выполнить подобный запрос, добавьте следующее в раздел [mysqld] вашего файла my.cnf.

init_connect='set autocommit=0'

Это установит autocommit выключенным для каждого клиента.

4
ответ дан 27 November 2019 в 18:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: