Ошибка «не авторизован: требуется аутентификация» из реестра API. это означает, что у вас включена авторизация в самом реестре. либо отключите аутентификацию в реестре и используйте только базовую аутентификацию nginx, либо прокси передайте заголовок «Авторизация» со связанными данными (хитро).
Таким образом, вы получаете согласованное представление о базе данных. Представьте, что у вас есть две таблицы, которые связаны между собой, но по какой-то причине вы делаете 2 выбора ... в псевдокоде:
myRows = query(SELECT * FROM A)
moreRows = query(SELECT * FROM B WHERE a_id IN myRows[id])
Если между двумя запросами кто-то изменит B, чтобы удалить несколько строк, вы ' у меня будут проблемы.
Подобный тому, что заявил RoBorg, Вы сделаете, ВЫБИРАЕТ w/i транзакции для предотвращения чтения фантомных данных между операторами. , НО важно отметить, что уровнем изоляции транзакции по умолчанию в SQL Server является READ, ФИКСИРОВАВШАЯ, который будет только предотвращать грязные чтения; для предотвращения фантомных данных, необходимо было бы использовать, по крайней мере, ПОВТОРЯЕМОЕ ЧТЕНИЕ. "Используйте эту опцию только когда необходимый".
Я нашел, что 'транзакции' ведут себя очень по-другому на различных SQL-серверах. В некоторых случаях запуск транзакции блокирует все другие соединения от способности выполнить любой SQL, пока транзакция не фиксируется или откатывается (MS SQLServer 6.5). Другие не имеют никаких проблем, и только блокируют, когда существует модификация (оракул). Блокировки могут даже расшириться для затрагивания только изменений - блокировки ячейки / блокировки строки / блокировки страницы / блокировки таблицы.
Обычно я использую транзакции только, когда целостность данных между несколькими вставляет / удаляют / операторы обновления должны сохраняться. Даже все еще я предпочитаю реализовывать это использующее определенное DB расположение каскадом, удаляет так, чтобы база данных сделала это автоматически и атомарно.
Использование транзакция, если бы можно предвидеть ситуацию, где Вы хотели бы откатывать несколько модификаций, но иначе, база данных сделает, это - атомарные обновления без дополнительного кода для контакта с ним.
Я проверял это последние несколько минут, так как это то, о чем я должен знать больше. Вот что я нашел.
Транзакции были бы полезны для выбора, если вы хотите заблокировать эту строку, когда человек читает записи и не хочет, чтобы она изменялась или читалась. Например, запустите эти запросы:
(в окне запроса 1)
НАЧАТЬ НАБОР ТРАНСАКТОРА * ИЗ MYTABLE WITH (ROWLOCK XLOCK) ГДЕ ID = 1
(в окне запроса 2 )
SELECT * FROM MYTABLE WHERE ID = 1
(окно запроса 2 не вернет результаты, пока вы не запустите его в окне 1)
COMMIT TRAN
Полезные ссылки:
http://msdn.microsoft.com/en-us/library/aa213039.aspx
http: // msdn. microsoft.com/en-us/library/aa213026.aspx
http://msdn.microsoft.com/en-us/library/ms190345.aspx
Моя цель состояла в том, чтобы получить что-то, чтобы заблокировать - и это наконец заработало после добавления туда XLOCK. Просто использование ROWLOCK не работало. Я предполагаю, что он выдавал общую блокировку (и данные были прочитаны) ... но я все еще исследую это.
Добавление - WITH (UPDLOCK ROWLOCK) - позволит вам выбрать и заблокировать строки для обновлений, что поможет с параллелизмом.
Будьте осторожны с настольными подсказками. Если вы начнете применять их случайно, ваша система замедлится, если в вашем приложении появится даже небольшое количество пользователей. Это единственное, что я знал, прежде чем заняться этим;)
Я сказал бы, что одна из основных целей транзакции состоит в том, чтобы предложить потенциал отката, если существуют какие-либо проблемы - который является более не существующим при простом чтении.
Другое серьезное основание, содержащее несколько, транзакция для чтения и для вставки имеет место, Вы хотите вставить рекордную основу на данных, которые Вы получаете от запроса Select, и Вы также хотите фиксировать каждые X вставленных строк.
Две транзакции:
позволит Вам сделать это правильно, в то время как с одной транзакцией не разделяют чтение, и запись не позволит Вам сделать фиксацию, не теряя читателя.