Фиксирует ли запрос mysql все


Я использую расширение mysql в php, я знаю, что оно устарело с версии PHP 5.5.0, но у меня уже есть много кода, написанного с использованием этого расширения. Мне кажется, что mysql_query фиксирует запрос, если это так, это означает, что он настроен на автоматическую фиксацию, Как настроить, чтобы он не выполнял автоматическую фиксацию.

Author: Borut Flis, 2013-02-09

1 answers

Старое расширение mysql не имеет функций, специально предназначенных для управления транзакциями, но вы можете выдавать инструкции SQL, чтобы делать то, что вы хотите.

Вы можете неявно отключить автоматическую фиксацию на время одной транзакции, просто запустив транзакцию:

mysql_query("START TRANSACTION");

Как только вы ЗАФИКСИРУЕТЕ или ОТКАТИТЕ, режим автоматической фиксации вернется к значению по умолчанию.

mysql_query("COMMIT"); // or ROLLBACK

Вы можете отключить автоматическую фиксацию для всего сеанса, установив переменную сеанса:

mysql_query("SET autocommit=0");

Или измените его глобально на своем экземпляре MySQL, чтобы он изменил значение по умолчанию для всех сеансов:

mysql_query("SET GLOBAL autocommit=0");

Или установите его для изменения глобальных настроек при запуске службы MySQL, отредактировав /etc/my.cnf:

[mysqld]
autocommit=0

Если вы используете MySQL 5.1, вам придется сделать это немного по-другому:

[mysqld]
init_connect='SET autocommit=0'

Вы, вероятно, уже знаете, но стоит повторить, что транзакции имеют значение только в том случае, если вы используете таблицы InnoDB. Таблицы MyISAM не поддерживают транзакции, поэтому они всегда автоматически фиксируются независимо от ваши настройки. То же самое с несколькими другими механизмами хранения, включая ПАМЯТЬ и CSV.

 5
Author: Bill Karwin, 2013-02-08 22:29:44