Identity (властивість) (transact-sql)

Стовпці ідентифікаторів можна використовувати для формування значень ключів. Властивість ідентифікаторів стовпчика гарантує наступне.

Кожне нове значення буде сформовано на основі поточних аргументів seed і increment.

Кожне нове значення для певної транзакції буде відмінно від інших паралельних транзакцій для таблиці.

Властивість ідентифікаторів стовпчика не гарантує наступне.

Унікальність значення - унікальність слід забезпечувати за допомогою обмеження PRIMARY KEY або UNIQUE або індексу UNIQUE.

Послідовні значення в межах транзакції - при вставці транзакцією кількох рядків не гарантується, що для них будуть призначені послідовні значення. Це пов'язано з тим, що в таблиці можуть виконуватися інші паралельні операції вставки. Якщо значення повинні бути послідовними, то транзакція повинна використовувати монопольну блокування для таблиці або рівень ізоляції SERIALIZABLE.

Послідовні значення після перезапуску сервера або інших помилок - SQL Server може зберігати значення ідентифікаторів в кеші для забезпечення високої продуктивності, і деякі з привласнених значень можуть бути втрачені при збої бази даних або перезавантаження сервера. Це може викликати пропуски в значеннях ідентифікатора при вставці. Якщо пропуски неприпустимі, програма має використовувати власний механізм для створення значень ключів. Використання генератора послідовностей з параметром NOCACHE може привести до обмеження пропусків в непідтверджених транзакціях.

Повторне використання значень - властивості ідентифікаторів, створені конкретним властивістю ідентифікатора з заданими аргументами seed і increment, не використовуються повторно підсистемою. Якщо певна інструкція вставки завершується з помилкою або виробляється її відкат, використані значення ідентифікаторів не будуть створені повторно. Це може привести до появи пропусків при створенні наступних значень ідентифікаторів.

Ці обмеження були створені навмисно і призначені для підвищення продуктивності, оскільки вони є допустимими в багатьох типових ситуаціях. Якщо через цих обмежень неможливо використовувати значення ідентифікаторів, рекомендується створити окрему таблицю, яка містить поточне значення, управління доступом до якої і призначення чисел буде виконуватися додатком.

Для кожної таблиці можна створити тільки один стовпець ідентифікаторів.

У таблицях, оптимізованих для пам'яті, як початкове значення і значення збільшення повинно бути задано 1,1. Вказівка ​​для початкового значення або значення збільшення числа, відмінного від 1, призведе до наступної помилки. Використання початкового значення і значення збільшення, відмінного від 1, що не підтримується в оптимізованих для пам'яті таблицях.

Схожі статті