ПредишенСледващото

Команда за ЗАКЛЮЧВАНЕ МАСИ блокове, определени в тях, за масата на потока. Command UNLOCK МАСИ освобождава всички брави, държани от потока от данни. Всички таблици, които са заключени от текущата нишка се отключват автоматично, когато потока, който командва LOCK ТАБЛИЦИ или да прекрати връзка със сървъра.

За да използвате команда за ЗАКЛЮЧВАНЕ таблиците за в MySQL 4.0.2, трябва да имате глобален LOCK ТАБЛИЦИ привилегия и бутона SELECT за да зададете масите. В MySQL 3.23 това изисква привилегии изберете. INSERT. Изтриване и актуализация за въпросната таблица.

Основните предимства на използването на LOCK ТАБЛИЦИ команда се състои във факта, че тя дава възможност за емулация на сделката или да получите по-висока скорост при обновяване таблици. По-долу е обяснено по-подробно.

Разликата между READ местни и READ е, че READ МЕСТНА позволява неконфликтни изявления ПОСОЧЕТЕ да изпълнява по време на съществуването на ключалката. Въпреки това, тази команда не може да се използва за работа с файлове с бази данни MySQL сървър извън през този локаут.

Когато използвате LOCK ТАБЛИЦИ, трябва да заключите всички таблици, които се използват в следващите искания, като се използва в този случай по същия псевдоним, който ще бъде в заявките си! Ако таблицата е посочена в няколко заявени времена на (с псевдоними), трябва да деактивирате всеки псевдоним!

заключване ПИШЕТЕ обикновено има по-висок приоритет от READ заключване. за да се гарантира, че промените се обработват възможно най-бързо. Това означава, че ако една нишка получава заключване чете и след това друга тема изисква заключване пишат. последващи ПРОЧЕТЕТЕ заключване искания ще изчакат до ПИШЕТЕ нишка получава ключалката и го пусна. Можете да използвате заключване LOW_PRIORITY напише. позволи на други теми, за да се получи ПРОЧЕТЕТЕ брави време, като основният поток е в ключалката на WRITE чака. LOW_PRIORITY НАПИШЕТЕ брави могат да се използват само ако е налице сигурност, че в крайна сметка ще бъде за период от време, когато няма теми няма да са прочели за заключване.

Таблиците с команда LOCK работи по следния начин:

Сортира всичко заключващ маса в ред, който се задава вътрешно, т.е. "Зашити" (от гледна точка на потребителя на тази цел не е уточнено).

заключване WRITE се поставя преди ключалката READ. ако масата е заключена с ключалка четат и пишат.

Блокове една маса в даден момент, докато нишката получава всички ключалки.

Горната процедура ще гарантира, че блокирането на масата не създава безизходица. Въпреки това, има и други неща, които трябва да бъдат наясно, когато се работи по тази схема:

Използвайте за маса заключване LOW_PRIORITY само пиша означава, че MySQL ще изпълнява тази ключалка, докато нишката с искане прочетете заключване. Ако потокът се получи заключване пишат и чака да се заключва в следната таблица от списъка са блокирани маси, всички други теми ще изчакат до заключването на WRITE да бъдат освободени. Ако това е сериозен проблем за кандидатурата си, трябва да помислите за конвертиране на съществуващи таблици в различен вид на таблици, които поддържат сделки.

Тема чака заключване маса могат безопасно да бъдат унищожени с помощта на командата убие. Синтаксис KILL команда.

Имайте предвид, че не можете да заключите всички таблици, които се използват във връзка с INSERT ОТЛОЖЕНА отчета за. тъй като в този случай командата INSERT се изпълнява като отделна тема.

Обикновено не е необходимо да се заключва маси, тъй като всички единични изказвания актуализация са атомни; няма друга нишка може да се намесва с всеки, който в момента изпълнението на SQL-команда. Въпреки това, в някои случаи, за предпочитане един или друг начин, за да заключите таблиците:

Ако имате намерение да работите с много операции на група от свързани таблици, а след това много по-бързо, за да заключите таблиците, които ще използвате. Разбира се, това си има недостатък, тъй като няма друг контрол на потока не може да актуализира таблицата с заключване прочетете или напишете маса прочетете заключване. Когато Заключването операции таблици се по-бързо, тъй като в този случай, MySQL не пише на диска ключовата кеша за заключените масите, докато UNLOCK МАСИ команда се нарича (обикновено ключовата кеша се изплаква след всяка SQL и управление). Използването на LOCK ТАБЛИЦИ увеличава за записване на скоростта / актуализация / изтриване тип за MyISAM таблици.

Ако използвате таблица, която не поддържа сделки, а след това с помощта на програма за електронни таблици трябва да кандидатствате за заключване МАСИ заповяда да се гарантира, че няма друга нишка идва между SELECT и актуализация. Ето един пример, който изисква използването на LOCK таблици, за да успешни операции:

Без блокиране на маси, е вероятно, че всяко друго управление нишка може да се въведе нов ред в транс масата между изпълнение на избере и операции.

Използване на частичното обновяване (UPDATE клиент стойност SET = стойност + NEW_VALUE) или функция LAST_INSERT_ID (). приложни команда за ЗАКЛЮЧВАНЕ маси в много случаи могат да бъдат избегнати.

Някои проблеми могат да бъдат решени чрез прилагане на блокиране на функциите на GET_LOCK ниво потребител () и RELEASE_LOCK (). Тези блокове се съхраняват в таблица, хашиш в сървъра и да се осигури висока скорост, са реализирани като pthread_mutex_lock () и pthread_mutex_unlock (). Различни функции.

За да научите повече за механизма на ключалката, вижте Как MySQL заключва таблици.

Можете да заключите всички маси в тези бази данни се чете заключване с команда FLUSH таблиците за С READ LOCK. Синтаксис ПРОМИВАНЕ команда. Това е много удобно да се резервно копие на файловата система, като Veritas, по време на работа, която може да се изисква авансово сметище.

ЗАБЕЛЕЖКА: LOCK ТАБЛИЦИ команда не запазва сделката и автоматично улавя всички активни операции преди да се опитате да се заключва масите.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!