отчети за контрол и сделка блокиране MySQL - HTML, CSS, JavaScript, Perl, PHP, MySQL

Синтаксис START СДЕЛКИ, ROLLBACK COMMITi
Операторите kotoryenelzyaotkatit

За някои оператори не може да се навива обратно чрез намаление на цените. Те включват данни езикови определение отчети (Data Definition Language - DDL), които създават и унищожават бази данни, както и създаване, изтриване и промяна на масата.
Трябва да се изработи вашите сделки, така че те не се включват тези оператори. Ако въведете оператор в началото на сделката, която не може да се пързаляха, а след това следното твърдение ще се провалят по-късно, пълният ефект от сделката не може да бъде отменена изявление ROLLBACK.

Операторите vyzyvayuschieneyavnyyCOMMIT

Следните оператори са имплицитно завършени транзакции (като че ли преди екзекуцията е била издадена COMMIT):
Отключване МАСИ също завършва сделка, ако всички маси бяха блокирани. Преди MySQL 4.0.13 Създаване на таблица завършва сделка, ако двоичен регистрацията ще бъдат включени.
Сделки не могат да бъдат вложени. Това е следствие от имплицитното COMMIT извършва за всяка текуща сделка, когато изявление начало сделка или техните синоними.
6.4.4.Sintaksis SAVEPOINTi ROLLBACK TO точка на запис
точка на запис идентификатор
ROLLBACK TO идентификатор точка на запис
От версия MySQL 4.0.14 и 4.1.1, InnoDB подкрепя SQL извлечения точка на запис и намаление на цените ДА точка на запис на.
Точка на запис изявление задава име точка на сделката започва с името на идентификатора. Ако текущата сделката има точка на запис със същото име, старата се изтрива и нов набор.
Оператор ROLLBACK TO точка на запис хвърля обратно сделката с име точка на запис. Модификации на реда, че сегашната сделка, извършени след този момент се изхвърлят обратно, но не премахват InnoDB ред брави, които са били инсталирани в паметта след точка на запис. (Имайте предвид, че за заключване на информацията нововписаният ред въз основа на идентификатора на транзакции, съхранена в реда, ключалката не се съхранява в паметта отделно. В този случай, на ред е отключен случаи.) Точки на запис, създадени на по-късно от един на име точка, изтрита.

Ако декларацията се връща следната грешка, това означава, че на име точка на запис не съществува:
ГРЕШКА 1181: Имаш грешка 153 по време на ROLLBACK
Всички точки на запис сделка се заличават, ако изпълни или отхвърлянето на промените, без да уточнява името на точката за спаси.

Синтаксис TABLESi LOCK отключи МАСИ

И обратното, ако таблицата е блокиран от псевдоним, трябва да се отнасят към него под псевдонима:
MySQL> LOCK ТАБЛИЦА т AS myalias READ;
MySQL> SELECT * SHZH т;
ГРЕШКА 1100: Таблица CH1 не беше заключена с LOCK ТАБЛИЦИ
MySQL> SELECT * от Т AS myalias;
Напиши заключване (запис) обикновено имат по-висок приоритет, отколкото четенето на блок (Прочетена), за да се гарантира, че актуализацията ще се проведе възможно най-скоро. Това означава, че ако една нишка получава заключване чете и след това друга тема изисква заключване пиша, следващи заключване искания четене ще изчака, докато не бъде инсталирано и отстранява чрез заключване на запис. Можете да използвате ключалката за запис с нисък приоритет (LOW_PRIORITY запис), за да позволи на други теми, за да установят заключване в четенето, докато текущата нишка е в очакване на възможността да се постави ключалка на записа. Трябва да инсталирате НАПИШЕТЕ заключва LOW_PRIORITY само когато сте сигурни, че сървърът работи, ще бъде време, когато няма теми, няма да държат ключалката за четене.
LOCK ТАБЛИЦИ работи, както следва:

  1. В домашна ред подредени всички таблици да бъдат заключени. От потребителска гледна точка, тази цел не е дефинирана.
  2. Ако таблицата е заключена, и четене и запис, настройка на заключването на запис преди заключването на четене.
  3. Заключва една маса в даден момент, докато нишката получава всички ключалки.
Тази политика се гарантира, че това не се случва мъртвите зони (мъртвите зони). Въпреки това, има и други обстоятелства във връзка с тази политика, която трябва да бъде взето под внимание.
Ако използвате LOW_PRIORITY НАПИШЕТЕ брави на маса, това означава само, че MySQL ще чака времето, когато няма да има поток, който иска да се установи заключване четиво. Когато един конец не може да инсталира една ключалка влизане на маса, и той очаква да бъде в състояние да блокира съседната маса в списъка, всички други теми, ще бъдат спрени, докато заключването на запис е освободена. Ако това е сериозен проблем за кандидатурата си, трябва да помислите за превръщане на някои от вашите маси в netran-zaktsionnuyu форма.
Можете спокойно да използвате убият, за да пречи на движението, което се очаква за заключване на маса. Виж. Раздел 6.5.4.3.
Имайте предвид, че не трябва да се заключва всички маси на тези, които изпълняват INSERT е забавено ", тъй като в този случай Вложката се извършва отделен сървър нишка.
Обикновено не е нужно да се заключва маси, тъй като всички отделни отчети вложка атомно - това е, няма друга нишка може да попречи на текущо изпълнявания SQL-декларация. Въпреки това, има случаи, в които заключване маси все още трябва да:
  • Ако ще да тече много операции на набор от MyISAM таблици, то е много по-бързо, за да, ако тяхното предварително блок. Заключване MyISAM таблици ускорява вмъкване, актуализиране, или да ги изтриете. Недостатъкът на това е, че няма поток не може да се актуализира блокиран таблицата четене (включително този, който е поставил на ключалката) и никой от потока не може да получава всеки достъп до таблица на записи блокиран, с изключение на потока настройка на заключването.
    Причината, поради която някои операции са по-бързи от MylSAM маси блокиран, се дължи на факта, че MySQL не отмивайте индекса на кеш за тези таблици до тогава, докато той се нарича отключване масите. Обикновено индексни кеш се нулират след всяка SQL-декларация.
  • Ако използвате двигател за съхранение в MySQL, която не поддържа транзакции, трябва да издаде на катинар маси, ако искате да се гарантира, че няма други изявления ще бъдат издадени между избере и допълни. Примерът по-долу изисква LOCK маси за безопасното извършване:
    MySQL> LOCKTABLEStransREAD, customerWRITE;
    . Mysql> SELECT SUM (стойност) от транс WHEREcustomer_2.6 = Id;
    MySQL> UPDATE клиент
    -> = SEToa1_ua1e summa_iz_predtstsusch<2го_оператора
    -> WHEREsizoteg_1<к=идентификатор; mysql> Отключете таблиците;


Без LOCK ТАБЛИЦИ, има възможност, че друга нишка може да се въведе нов ред в транс масата между изпълнение на Изберете и си UPDATE.
Можете да се избягва използването на LOCK ТАБЛИЦИ в много случаи, като се използват относителни актуализации (UPDATE клиент стойност SET = стойност + NEW_VALUE), или (функцията LAST_INSERT_ID). Сантиметра. Преградни Сделки и операции Атомни
заключване на таблици могат да бъдат избегнати, в някои случаи с помощта на функциите на ниво потребител GET_LOCK () и RELEASE_LOCK (). Тези брави са записани в хеш таблицата в сървъра и изпълнявани за скорост повикване pthread_mutex_lock () и pthread_mutex_unlock (). Cm. Разделя различни функции
Можете да заключите в четенето всички маси в всички бази данни на оператора изплакнете маси с четене LOCK. Вижте. RazdelSintaksis LOCK ТАБЛИЦИ и отключване МАСИ Това е един много удобен начин да получите резервни копия, ако се работи с файловата система като Veritas, който може да направи снимки във времето.
Nazametku%! Ако използвате ALTER масата на заключен маса, тя може да бъде отключена. Cm. Преградни Проблеми с ALTER TABLE

Синтаксис SET СДЕЛКИ
Задайте [GLOBAL | Сесия] ОПЕРАЦИИ ИЗОЛИРАНЕ НИВО

  • Това твърдение определя нивото на изолация на следващата сделка, в световен мащаб, или само за текущата сесия.
  • Поведението на SET СДЕЛКИ подразбиране е, че тя определя нивото на изолация за следващия (още не са пуснати) сделката. Ако по подразбиране по сделката за всички нови връзки, за да се установи от този момент нататък. Съществуващите връзки не са засегнати. За да постигне това, операторът трябва да имат привилегията SUPER. СЕСИЯ Application набори, за ниво на изолация по подразбиране за всички бъдещи сделки за текущата сесия.

    Можете също да зададете начална глобалното ниво на изолация за Mysqld сървъра, като го извикате с опция -transaction-изолация