Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL идентичността (автономер) се увеличава дори при връщане назад на транзакция

Ако се замислите, автоматично нарастващото число не трябва да бъде транзакционен. Ако други транзакции трябваше да изчакат, за да видят дали автоматичното номериране ще бъде използвано или „отменено“, те ще бъдат блокирани от съществуващата транзакция, използваща автоматичното номериране. Например, разгледайте моя псевдо код по-долу с таблица A, използвайки поле за автоматично номериране за колоната ID:

User 1
------------
begin transaction
insert into A ...
insert into B ...
update C ...
insert into D ...
commit


User 2
-----------
begin transaction
insert into A ...
insert into B ...
commit

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

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Риск от сблъсък на UUID, използвайки различни алгоритми

  2. Скриване на таблица в база данни на SQL Server?

  3. Вътрешни елементи за репликация на транзакции на SQL сървър – част 2

  4. 3 въпроса за наблюдение на SQL Server, които да зададете при поемане на позиция в DBA

  5. Как да върнете всички ненадеждни ограничения на външния ключ в SQL Server (пример за T-SQL)