powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / транзакции и autocommit
10 сообщений из 10, страница 1 из 1
транзакции и autocommit
    #38669942
z0dium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Просветите, пожалуйста, по нескольким моментам.

Есть mysqli для работы с MySQL. У него есть метод mysqli->begin_transaction(). А еще есть mysqli->autoCommit().
Вроде бы везде написано, что следует пользоваться транзакциями через автокоммит = 0. Но мне почему-то кажется, что begin_transaction тоже придуман не просто так. Кто-нибудь разбирался, что правильнее?

Еще один вопрос вот в чем. У меня есть всего 1 пользователь в MySQL (больше сделать не дают). Под этим пользователем будут несколько человек работать с базой. Если один из них включит автокоммит=0, то у остальных тоже станет 0? Т.е. транзакции будут включены у всех, кто пользуется базой или только у того, кто ее включил?
...
Рейтинг: 0 / 0
транзакции и autocommit
    #38670463
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
z0diumЗдравствуйте!
Просветите, пожалуйста, по нескольким моментам.

Есть mysqli для работы с MySQL. У него есть метод mysqli->begin_transaction(). А еще есть mysqli->autoCommit().
Вроде бы везде написано, что следует пользоваться транзакциями через автокоммит = 0. Но мне почему-то кажется, что begin_transaction тоже придуман не просто так. Кто-нибудь разбирался, что правильнее?

Еще один вопрос вот в чем. У меня есть всего 1 пользователь в MySQL (больше сделать не дают). Под этим пользователем будут несколько человек работать с базой. Если один из них включит автокоммит=0, то у остальных тоже станет 0? Т.е. транзакции будут включены у всех, кто пользуется базой или только у того, кто ее включил?


Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
$mysqli->autocommit(TRUE);

$mysqli->begin_transaction();

$mysqli->query('insert into t1 values('petya,23);
$mysqli->query('insert into t2 values('23,100);

$mysqli->query('delete from t3 where id = 100);

$mysqli->commit();



Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
$mysqli->autocommit(TRUE);

//equal

$mysqli->query('set autocommit = 0;');

//you can
$mysqli->query('show variables like 'autocommit');
//get current values. this value is for current connection!!!

//for all server
$mysqli->query('set global autocommit = 0');

//it is immpasible to set up for specified user!!!
...
Рейтинг: 0 / 0
транзакции и autocommit
    #38670465
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIXXED!
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
$mysqli->autocommit(FALSE);

$mysqli->begin_transaction();

$mysqli->query('insert into t1 values('petya,23);
$mysqli->query('insert into t2 values('23,100);

$mysqli->query('delete from t3 where id = 100);

$mysqli->commit();

//if need .
//$mysqli->autocommit(TRUE);
...
Рейтинг: 0 / 0
транзакции и autocommit
    #38670767
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
z0diumЗдравствуйте!
Просветите, пожалуйста, по нескольким моментам.

Есть mysqli для работы с MySQL. У него есть метод mysqli->begin_transaction(). А еще есть mysqli->autoCommit().
Вроде бы везде написано, что следует пользоваться транзакциями через автокоммит = 0. Но мне почему-то кажется, что begin_transaction тоже придуман не просто так. Кто-нибудь разбирался, что правильнее?

Еще один вопрос вот в чем. У меня есть всего 1 пользователь в MySQL (больше сделать не дают). Под этим пользователем будут несколько человек работать с базой. Если один из них включит автокоммит=0, то у остальных тоже станет 0? Т.е. транзакции будут включены у всех, кто пользуется базой или только у того, кто ее включил?

По-моему ты ошибаешься, что везде пишут, что СЛЕДУЕТ пользоваться транзакциями через автокоммит :) Насколько я знаю автокоммит - это просто упрощение процедуры... Мне не совсем явно представляется что происходит во время отключения автоматических коммитов (какой уровень изоляции используется и что кому видно или не видно).


В любом случае я пользуюсь именно транзакциями... там всё прозрачнее намного :) Выбрал насколько изолирован хочешь быть от других и понеслась )) И прямо походу наблюдаешь за изменениями... И блокировки все срабатывают нормально (явно понятно что и почему) и откатить транзакцию можно спокойно на любом этапе. Я бы в общем советовал бы пользоваться именно транзакциями, а не автокоммитом :).

p.s. по поводу автокоммита, как и транзакции, он распространяется только на активную сессию. То есть если 10 человек выполнят под одним юзером автокоммит=0, то у одиннадцатого он останется установлен в 1 :)
...
Рейтинг: 0 / 0
транзакции и autocommit
    #38670888
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

Любой запрос к MYSQL серверу, это команда - или набор команд.

влюбом случае мускл будет каждую команду выполнять как команду - тоесть следующая за ней команда будет видеть уже результат предыдущей

вот это и называеться автокомит.

что не обязательно после каждого атомарного действия делать комит самому, он делаеться базой автоматически.

ЗЫ
в начале каждой команды транзакционная модель(иннодб) неявно делает команду страт_транкзанкции, и автокомит, будет только в этом случае.

если при старте транкзанкции вручном режиме работаем, то автокомит не начнёт работать, пока мы свою транкзанкцию не за комитим.
...
Рейтинг: 0 / 0
транзакции и autocommit
    #38670890
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёрz0diumЗдравствуйте!
Просветите, пожалуйста, по нескольким моментам.

Есть mysqli для работы с MySQL. У него есть метод mysqli->begin_transaction(). А еще есть mysqli->autoCommit().
Вроде бы везде написано, что следует пользоваться транзакциями через автокоммит = 0. Но мне почему-то кажется, что begin_transaction тоже придуман не просто так. Кто-нибудь разбирался, что правильнее?

Еще один вопрос вот в чем. У меня есть всего 1 пользователь в MySQL (больше сделать не дают). Под этим пользователем будут несколько человек работать с базой. Если один из них включит автокоммит=0, то у остальных тоже станет 0? Т.е. транзакции будут включены у всех, кто пользуется базой или только у того, кто ее включил?

По-моему ты ошибаешься, что везде пишут, что СЛЕДУЕТ пользоваться транзакциями через автокоммит :) Насколько я знаю автокоммит - это просто упрощение процедуры... Мне не совсем явно представляется что происходит во время отключения автоматических коммитов (какой уровень изоляции используется и что кому видно или не видно).


В любом случае я пользуюсь именно транзакциями... там всё прозрачнее намного :) Выбрал насколько изолирован хочешь быть от других и понеслась )) И прямо походу наблюдаешь за изменениями... И блокировки все срабатывают нормально (явно понятно что и почему) и откатить транзакцию можно спокойно на любом этапе. Я бы в общем советовал бы пользоваться именно транзакциями, а не автокоммитом :).

p.s. по поводу автокоммита, как и транзакции, он распространяется только на активную сессию. То есть если 10 человек выполнят под одним юзером автокоммит=0, то у одиннадцатого он останется установлен в 1 :)

ну на пхп, я бы не советовал пользоваться транкзанкциями :) если так глубоко копаем, то надо лезть в базу, и там химичить, а не пхп кодом лочить пускай даже одну строку в базе, и делать базу зависимой от локальных тормозов веб сервера и прочей бабуйни что с этим связано(например тестовая команда слиип(10) :) )
...
Рейтинг: 0 / 0
транзакции и autocommit
    #38670891
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
плин, я походу напутал, в доках написано автокомит, это какое действие для открытой транкзанкции (если ваще небыло ни комита, ни ролбека)

но я точно помню ,что я както выключал автокомит, имено в понимании выше. делал по 5тыщ инсертов и потом комитил для быстроты
...
Рейтинг: 0 / 0
транзакции и autocommit
    #38671038
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453плин, я походу напутал, в доках написано автокомит, это какое действие для открытой транкзанкции (если ваще небыло ни комита, ни ролбека)

но я точно помню ,что я както выключал автокомит, имено в понимании выше. делал по 5тыщ инсертов и потом комитил для быстроты

Ну так это же оно и есть :) Выполняем кучу запросов, а потом коммитим в базу все разом. То есть не каждый запрос отдельно, а именно порцию. Но там с уровнями изоляции сложнее :) транзакции могут полностью проникать друг в друга, частично или совсем изолироваться. Вот ты упомянул сейчас случай полной изоляции, когда изменения видны в транзакции, но не извне... Но можно запустить транзакции так, что бы одна спокойно копалась в строках другой :)

А насчёт пхп предостережение не понял :) Я транзакции использую только для сохранения целостности данных (иное пока не интересует). А потому на стороне php я толкаю в базу например 4 запроса, и если один из них проваливается по какой-то причине - откатываю транзакцию назад (ну и как говорили, авось свет отрубят при работе с базой... 2 строки добавил, а 2 не успел... и всё:) ).

Ну то есть я согласен, что чем меньше "уровней" используется в блокировке полей - тем лучше. Но как в таком случае отказаться от пхп я не представляю.
...
Рейтинг: 0 / 0
транзакции и autocommit
    #38671079
z0dium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо за отклик =)

По поводу "Следует" я прочитал в http://php.net/manual/ru/mysqli.quickstart.transactions.php .
Да и в нескольких других местах тоже было.

Я тоже склоняюсь по логике к begin_transaction. А если "вырубят свет" на середине транзакции, то что произойдет?
первая половина где-то будет висеть? И можно ли к ней добраться после включения света? =)
...
Рейтинг: 0 / 0
транзакции и autocommit
    #38671887
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
z0diumВсем спасибо за отклик =)

По поводу "Следует" я прочитал в http://php.net/manual/ru/mysqli.quickstart.transactions.php .
Да и в нескольких других местах тоже было.

Я тоже склоняюсь по логике к begin_transaction. А если "вырубят свет" на середине транзакции, то что произойдет?
первая половина где-то будет висеть? И можно ли к ней добраться после включения света? =)

не думаю что после завершения сессии можно вернуться к прерванной транзакции. На то она и транзакция, что бы в случае неудачи откатиться и не вносить в таблицы не целостные данные :)

А насчёт "следует", я в предоставленном источнике не нашёл ничего, что говорило бы, что отключение автокоммита предпочтительнее, чем проведение (старт и фиксация) отдельной транзакции.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / транзакции и autocommit
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]