Я использую расширение mysql в php, я знаю, что он устарел от PHP 5.5.0, но у меня есть много кода, уже написанных с использованием этого расширения. Мне кажется, что mysql_query совершает запрос, если это означает, что он установлен в autocomit, как настроить, чтобы он не автокомитировал.
У старого расширения mysql нет функций, специально предназначенных для управления транзакциями, но вы можете выдавать SQL-запросы, чтобы делать то, что вы хотите.
Вы можете неявно отключить автообновление в течение одной транзакции, просто запустив транзакцию:
mysql_query("START TRANSACTION");
Как только вы COMMIT или ROLLBACK, режим autocommit вернется к умолчанию.
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 не поддерживают транзакции, поэтому они всегда автономны, независимо от ваших настроек. То же самое с несколькими другими системами хранения, включая MEMORY и CSV.