Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
транзакции и autocommit
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Просветите, пожалуйста, по нескольким моментам. Есть mysqli для работы с MySQL. У него есть метод mysqli->begin_transaction(). А еще есть mysqli->autoCommit(). Вроде бы везде написано, что следует пользоваться транзакциями через автокоммит = 0. Но мне почему-то кажется, что begin_transaction тоже придуман не просто так. Кто-нибудь разбирался, что правильнее? Еще один вопрос вот в чем. У меня есть всего 1 пользователь в MySQL (больше сделать не дают). Под этим пользователем будут несколько человек работать с базой. Если один из них включит автокоммит=0, то у остальных тоже станет 0? Т.е. транзакции будут включены у всех, кто пользуется базой или только у того, кто ее включил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2014, 00:55 |
|
||
|
транзакции и autocommit
|
|||
|---|---|---|---|
|
#18+
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. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2014, 14:29 |
|
||
|
транзакции и autocommit
|
|||
|---|---|---|---|
|
#18+
FIXXED! Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2014, 14:30 |
|
||
|
транзакции и autocommit
|
|||
|---|---|---|---|
|
#18+
z0diumЗдравствуйте! Просветите, пожалуйста, по нескольким моментам. Есть mysqli для работы с MySQL. У него есть метод mysqli->begin_transaction(). А еще есть mysqli->autoCommit(). Вроде бы везде написано, что следует пользоваться транзакциями через автокоммит = 0. Но мне почему-то кажется, что begin_transaction тоже придуман не просто так. Кто-нибудь разбирался, что правильнее? Еще один вопрос вот в чем. У меня есть всего 1 пользователь в MySQL (больше сделать не дают). Под этим пользователем будут несколько человек работать с базой. Если один из них включит автокоммит=0, то у остальных тоже станет 0? Т.е. транзакции будут включены у всех, кто пользуется базой или только у того, кто ее включил? По-моему ты ошибаешься, что везде пишут, что СЛЕДУЕТ пользоваться транзакциями через автокоммит :) Насколько я знаю автокоммит - это просто упрощение процедуры... Мне не совсем явно представляется что происходит во время отключения автоматических коммитов (какой уровень изоляции используется и что кому видно или не видно). В любом случае я пользуюсь именно транзакциями... там всё прозрачнее намного :) Выбрал насколько изолирован хочешь быть от других и понеслась )) И прямо походу наблюдаешь за изменениями... И блокировки все срабатывают нормально (явно понятно что и почему) и откатить транзакцию можно спокойно на любом этапе. Я бы в общем советовал бы пользоваться именно транзакциями, а не автокоммитом :). p.s. по поводу автокоммита, как и транзакции, он распространяется только на активную сессию. То есть если 10 человек выполнят под одним юзером автокоммит=0, то у одиннадцатого он останется установлен в 1 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2014, 17:31 |
|
||
|
транзакции и autocommit
|
|||
|---|---|---|---|
|
#18+
Програмёр, Любой запрос к MYSQL серверу, это команда - или набор команд. влюбом случае мускл будет каждую команду выполнять как команду - тоесть следующая за ней команда будет видеть уже результат предыдущей вот это и называеться автокомит. что не обязательно после каждого атомарного действия делать комит самому, он делаеться базой автоматически. ЗЫ в начале каждой команды транзакционная модель(иннодб) неявно делает команду страт_транкзанкции, и автокомит, будет только в этом случае. если при старте транкзанкции вручном режиме работаем, то автокомит не начнёт работать, пока мы свою транкзанкцию не за комитим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2014, 19:17 |
|
||
|
транзакции и autocommit
|
|||
|---|---|---|---|
|
#18+
Програмёрz0diumЗдравствуйте! Просветите, пожалуйста, по нескольким моментам. Есть mysqli для работы с MySQL. У него есть метод mysqli->begin_transaction(). А еще есть mysqli->autoCommit(). Вроде бы везде написано, что следует пользоваться транзакциями через автокоммит = 0. Но мне почему-то кажется, что begin_transaction тоже придуман не просто так. Кто-нибудь разбирался, что правильнее? Еще один вопрос вот в чем. У меня есть всего 1 пользователь в MySQL (больше сделать не дают). Под этим пользователем будут несколько человек работать с базой. Если один из них включит автокоммит=0, то у остальных тоже станет 0? Т.е. транзакции будут включены у всех, кто пользуется базой или только у того, кто ее включил? По-моему ты ошибаешься, что везде пишут, что СЛЕДУЕТ пользоваться транзакциями через автокоммит :) Насколько я знаю автокоммит - это просто упрощение процедуры... Мне не совсем явно представляется что происходит во время отключения автоматических коммитов (какой уровень изоляции используется и что кому видно или не видно). В любом случае я пользуюсь именно транзакциями... там всё прозрачнее намного :) Выбрал насколько изолирован хочешь быть от других и понеслась )) И прямо походу наблюдаешь за изменениями... И блокировки все срабатывают нормально (явно понятно что и почему) и откатить транзакцию можно спокойно на любом этапе. Я бы в общем советовал бы пользоваться именно транзакциями, а не автокоммитом :). p.s. по поводу автокоммита, как и транзакции, он распространяется только на активную сессию. То есть если 10 человек выполнят под одним юзером автокоммит=0, то у одиннадцатого он останется установлен в 1 :) ну на пхп, я бы не советовал пользоваться транкзанкциями :) если так глубоко копаем, то надо лезть в базу, и там химичить, а не пхп кодом лочить пускай даже одну строку в базе, и делать базу зависимой от локальных тормозов веб сервера и прочей бабуйни что с этим связано(например тестовая команда слиип(10) :) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2014, 19:19 |
|
||
|
транзакции и autocommit
|
|||
|---|---|---|---|
|
#18+
плин, я походу напутал, в доках написано автокомит, это какое действие для открытой транкзанкции (если ваще небыло ни комита, ни ролбека) но я точно помню ,что я както выключал автокомит, имено в понимании выше. делал по 5тыщ инсертов и потом комитил для быстроты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2014, 19:24 |
|
||
|
транзакции и autocommit
|
|||
|---|---|---|---|
|
#18+
alex564657498765453плин, я походу напутал, в доках написано автокомит, это какое действие для открытой транкзанкции (если ваще небыло ни комита, ни ролбека) но я точно помню ,что я както выключал автокомит, имено в понимании выше. делал по 5тыщ инсертов и потом комитил для быстроты Ну так это же оно и есть :) Выполняем кучу запросов, а потом коммитим в базу все разом. То есть не каждый запрос отдельно, а именно порцию. Но там с уровнями изоляции сложнее :) транзакции могут полностью проникать друг в друга, частично или совсем изолироваться. Вот ты упомянул сейчас случай полной изоляции, когда изменения видны в транзакции, но не извне... Но можно запустить транзакции так, что бы одна спокойно копалась в строках другой :) А насчёт пхп предостережение не понял :) Я транзакции использую только для сохранения целостности данных (иное пока не интересует). А потому на стороне php я толкаю в базу например 4 запроса, и если один из них проваливается по какой-то причине - откатываю транзакцию назад (ну и как говорили, авось свет отрубят при работе с базой... 2 строки добавил, а 2 не успел... и всё:) ). Ну то есть я согласен, что чем меньше "уровней" используется в блокировке полей - тем лучше. Но как в таком случае отказаться от пхп я не представляю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2014, 23:05 |
|
||
|
транзакции и autocommit
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за отклик =) По поводу "Следует" я прочитал в http://php.net/manual/ru/mysqli.quickstart.transactions.php . Да и в нескольких других местах тоже было. Я тоже склоняюсь по логике к begin_transaction. А если "вырубят свет" на середине транзакции, то что произойдет? первая половина где-то будет висеть? И можно ли к ней добраться после включения света? =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2014, 00:07 |
|
||
|
транзакции и autocommit
|
|||
|---|---|---|---|
|
#18+
z0diumВсем спасибо за отклик =) По поводу "Следует" я прочитал в http://php.net/manual/ru/mysqli.quickstart.transactions.php . Да и в нескольких других местах тоже было. Я тоже склоняюсь по логике к begin_transaction. А если "вырубят свет" на середине транзакции, то что произойдет? первая половина где-то будет висеть? И можно ли к ней добраться после включения света? =) не думаю что после завершения сессии можно вернуться к прерванной транзакции. На то она и транзакция, что бы в случае неудачи откатиться и не вносить в таблицы не целостные данные :) А насчёт "следует", я в предоставленном источнике не нашёл ничего, что говорило бы, что отключение автокоммита предпочтительнее, чем проведение (старт и фиксация) отдельной транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2014, 15:07 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38671079&tid=1462687]: |
0ms |
get settings: |
10ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 363ms |

| 0 / 0 |
