Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] 3 вперед Ctrl→ все |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37198 |
|
||||
2 фев 18, 13:31 [21160487] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9683 |
Еще раз - конкурирующие update никогда не вызовут "потерянных изменений". Никаких дополнительных манипуляций не требуется. |
||
2 фев 18, 13:43 [21160558] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
RCSI? |
||||
2 фев 18, 13:44 [21160566] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1968 |
а что меняется-то для апдэйта на RCSI? если данный апдэйт блокирован соседним апдэйтом, он будет ждать соседского коммита(ну или роллбэка, без разницы). и уж если сосед закоммитит, то прочитана будет последняя закоммиченная версия, т.е. как раз то, что проапдэйтила соседняя сессия. ну а при роллбэке будут прочитаны неизмененные данные. какой же тут lost update? --- у него в вопросе голый апдэйт (1 statement). не сперва некое чтение, а потом апдэйт, и все это в транзакции, а простой апдэйт. которому вообще по барабану Isolation Level |
||||
2 фев 18, 14:20 [21160727] Ответить | Цитировать Сообщить модератору |
Руслан Дамирович Member Откуда: Резиновая нерезиновая Сообщений: 942 |
[quot Гавриленко Сергей Алексеевич]
Владельцы ОСАГО с вами не согласны! |
||
2 фев 18, 14:20 [21160728] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37198 |
|
|
2 фев 18, 14:21 [21160734] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Yasha123,
прочитаны будут данные на начало транзакции, ждать комита никто не будет чтобы читать |
||
2 фев 18, 14:23 [21160742] Ответить | Цитировать Сообщить модератору |
Игорь_UUS Member Откуда: г. Екатеринбург Сообщений: 680 |
всё понятно... выполнение любой операции это и есть транзакция, если нет явной происходит autocommit после каждого действия... спасибо! |
||
2 фев 18, 14:34 [21160779] Ответить | Цитировать Сообщить модератору |
dao Member Откуда: Москва Сообщений: 771 |
не правильно. |
||||
2 фев 18, 14:35 [21160785] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9683 |
|
||||
2 фев 18, 14:38 [21160798] Ответить | Цитировать Сообщить модератору |
Игорь_UUS Member Откуда: г. Екатеринбург Сообщений: 680 |
Я реально запутался))) Дак надо что-то применять или нет... тут пишут то ли надо, то ли не надо |
||||
2 фев 18, 14:42 [21160811] Ответить | Цитировать Сообщить модератору |
dao Member Откуда: Москва Сообщений: 771 |
Вы успокойтесь и скажите что вам надо сделать , а не то что вы придумали в голове, и пытаетесь реализовать )) Вам нужна непрерывная нумерация? |
||||
2 фев 18, 14:53 [21160855] Ответить | Цитировать Сообщить модератору |
гогол Member [заблокирован] Откуда: Сообщений: 88 |
Изоляция транзакций. |
2 фев 18, 14:59 [21160879] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
в частности да, речь о том что если считать, протом менять |
||||||
2 фев 18, 15:00 [21160884] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9683 |
|
||
2 фев 18, 15:03 [21160900] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
конечно, rcsi тоже не его случай :) |
||||
2 фев 18, 15:05 [21160906] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1968 |
сделайте update с output на rcsi. в одном окне откройте транзакцию и делайте первый апдэйт без коммита, во втором окне апдэйт с аутпутом. ну теперь комитьте первого |
||||
2 фев 18, 15:09 [21160921] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
а так --1 tran BEGIN TRAN UPDATE dbo.P SET Id = 500 --COMMIT --2 tran BEGIN TRAN DECLARE @a INT = ( SELECT MAX(Id) FROM dbo.P ) UPDATE dbo.P SET Id = @a COMMIT |
||||
2 фев 18, 15:10 [21160927] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9683 |
|
||
2 фев 18, 15:17 [21160953] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1968 |
у меня там написано аж 2 раза: у товарища ГОЛЫЙ АПДЭЙТ, А НЕ СЕЛЕКТ + АПДЭЙТ И ВСЕ ЭТО В ОДНОЙ ТРАНЗАКЦИИ. пишу не с компа, с приложения в телефоне, у него не предусмотрено bold + size 3, могу только заглавными написать, читайте внимательнее, плиз |
||||
2 фев 18, 15:25 [21160973] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9683 |
При updat'е происходит примерно следующее - при считывании значения изменяемого столбца на строку таблицы накладывается U-блокировка (может и сразу X). И это гарантирует, что никакие конкурирующие писатели (update, delete и т.п.) не смогут прочитать значения из этой строки до снятия блокировки. Потому что они тоже захотят наложить U и не смогут, ибо U не совместима с другой U или X. |
||
2 фев 18, 15:28 [21160988] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1968 |
вот именно. а все уровни изоляций - они для читателей, а не для голых писателей |
||||
2 фев 18, 15:37 [21161047] Ответить | Цитировать Сообщить модератору |
Игорь_UUS Member Откуда: г. Екатеринбург Сообщений: 680 |
Спасибо, получается ничего тут придумывать ненужно... |
||||
2 фев 18, 16:36 [21161347] Ответить | Цитировать Сообщить модератору |
dao Member Откуда: Москва Сообщений: 771 |
а вот не совсем )) - таки обрисуйте свою задачу - что у вас за "таблица-счётчик" )) |
||||
2 фев 18, 17:05 [21161429] Ответить | Цитировать Сообщить модератору |
msLex Member Откуда: Сообщений: 8856 |
Это не так create table test ( id int not null primary key clustered , v int ) insert test( id ) values (1), (3) begin tran set transaction isolation level read committed update test with(rowlock) set v = 1 where id = 2 exec sp_lock @@spid commit begin tran set transaction isolation level serializable update test with(rowlock) set v = 1 where id = 2 exec sp_lock @@spid commit drop table test Результат
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 фев 18, 18:30 [21161606] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] 3 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |