Сделките в MySQL

UPDATE USER_ACCOUNT SET allsum = allsum + 1000 КЪДЕТО J = "1";
UPDATE USER_ACCOUNT SET allsum = allsum - 1000 КЪДЕТО J = '2';

Това прехвърляне на средства от сметка на клиент с номера на предната сметка на клиента от 2 до номер 1. А сега си представете, че първата заявка е изпълнена успешно, но втората по някаква причина (грешка на база данни, грешка на сървъра, и т.н.), не е така. Така че ние имаме ситуация, която заплашва реалните парични загуби.

За да се избегне това е необходимо, че и двете искания са изработени от едно парче. И ако е имало грешка в една заявка няма да изпълнява останалите. За това е изобретен и механизъм сделка.

Операторът се отваря на сделката в MySQL: "СТАРТ сделка;". След всичко заявка или сделка може да бъде завършена извършване на промени в базата данни - "COMMIT;", или се откажете от всичко се връща към първоначалното си състояние - "ROLLBACK".

Освен ако изрично не разгледа случая на MySQL след това има няколко клопки.
1. В MySQL, има няколко вида на таблици. Това ИПМ, купчина, MyISAM, InnoDB, BDB и т.н. Механизъм за транзакции поддържа само InnoDB и ББР. Ето защо, всички от масите, които искате да работите чрез сделката, трябва да се превърнат в съответния тип.
2. По подразбиране, MySQL работи в режим autocommit. Това означава, че резултатите от всеки тип SQL изявление, което променя данните ще се съхраняват едновременно.

Режим autocommit да деактивирате SET AUTOCOMMIT = 0 команда. Ако забраните autocommit режим, всяка сделка трябва да е ясно пълен COMMIT / ROLLBACK отчети.

По този начин, с цел прилагане на сделката odokratnuyu реши проблема в самото начало, ние трябва да изпълни следния код:

СТАРТ сделка;
UPDATE USER_ACCOUNT SET allsum = allsum + 1000 КЪДЕТО J = "1";
UPDATE USER_ACCOUNT SET allsum = allsum - 1000 КЪДЕТО J = '2';
COMMIT;