Транзакции

BoFFiN

Новичок
Понятие Транзакции и их использование в ADODB

Можно попросить не отсылать читать маны, а простым русским языком, объяснить что такое транзакции и где их можно применять?
спасибо.
 

crocodile2u

http://vbolshov.org.ru
Для этого, видимо, придется скопировать мануал сюда...

В общем, можно сказать, что транзакция - это ряд запросов, соединенных в единое целое. Причем, если произошла ошибка при выполнении хотя бы одного из этих запросов, можно "откатиться" назад - к состоянию базы ДО начала транзакции.
 

rotoZOOM

ACM maniac
Как я понимаю - это такой блок команд/запросов в БД, который либо целиком выполняется, либо целиком не выполняется.
Очень полезная штука, например тебе надо произвести каскадное удаление/добавление чего-то там в базу, что зависит друг от друга. И вот на каком-нибудь Nтом шаге, после успешных N-1 действий, ты не смог выполнить действие.
Теперь тебе надо выдать ошибку пользователю и произвести откат всего, чего ты там наделал.

Транзакции делают это за тебя.
 

BoFFiN

Новичок
crocodile2u
Спасибо, т.е. применять их следует там, где идет последовательность запросов, например при добавление нового узла в Nested sets, я правильно понимаю?
 

Romantik

TeaM PHPClub
SELECT YourSalary FROM Bank
= 1000$
SELECT YourAccount FROM Account
= 0$
UPDATE Bank SET YourSalary=YourSalary-500
UPDATE Account SET YourAccount=YourAccount+500
SELECT YourSalary FROM Bank
= 500$
SELECT YourAccount FROM Account
= 500$
Если происходит сбой когда первый UPDATE отработал, а второй нет не используя транзакции, то тебя кинули на 500$
В случае использования- произойдет "ОТКАТ" и все станет на свои места.

Надеюсь понятно? =)
 

BoFFiN

Новичок
Romantik

Да... всё как и думал... спасибо всем...

-~{}~ 11.02.05 14:38:

Делаю, как написано тут - http://detail.phpclub.net/article/2003-08-19
PHP:
$conn = &ADONewConnection($typeBD); 
$conn->Connect($mySQLserver, $mySQLuser, $mySQLpassword, $mySQLdb); 
$conn->debug = true;               	
$conn->StartTrans();
$conn->Execute($sql);
$conn->Execute($sql_2);
$id = $conn->Insert_ID();
$conn->Execute($sql_4);
$conn->CompleteTrans();     
$conn->Close();
Получаю такую запись:
Transactions not supported in 'mysql' driver. Use 'mysqlt' or 'mysqli' driver, почему? в статье вроде про это ничего не говорилось... Это нормально?
 

virakochi

Устал
Это нормально. MySQL-таблицы типа MyIsam не поддерживают транзакций.
 

BoFFiN

Новичок
ах да забыл, версия мускула 4.0.21

-~{}~ 11.02.05 14:58:

virakochi
тогда может в качестве типа выставить InnoDB? или какой?
 

Сергей123

Новичок
рЭклама:
- в последнем PHP Inside была статья, вроде, про транзакции
примЭчание:
- не читал
 

virakochi

Устал
InnoDB - можно. Только посмотри сначала have_innodb = yes.
А можно другую БД использовать..
 

BoFFiN

Новичок
virakochi
в my.ini

have_innodb = yes
innodb_data_file_path = ibdata1:10M:autoextend
set-variable = innodb_buffer_pool_size=70M
set-variable = innodb_additional_mem_pool_size=10M
set-variable = innodb_log_file_size=20M
set-variable = innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1

Транзакий, как нету, так и нету... другую БД нет возможности использовать...

Бресь Сергей
сейчас, посмотрю.. спасибо...
 
Сверху