Реферат: К вопросу об идентификаторах

--- результат:

Last ID in session Last ID in batch Last ID in IdentTable

------------------ ---------------- ---------------------

-2 10 11

ID some_values

----------- ----------------------------------------------

... ...

9 value 7

10 value 8

11 value 9

(9 row(s) affected)

ID value

----------- ----------------------------------------------

0 1961-02-01 19:15

-2 1961-02-01 19:30

(2 row(s) affected)

Собственно этот пример и демонстрирует различия всех трех способов получения записанного сервером значения автоинкремента. Эти способы покрывают практически все потребности в автоинкрементах, которые могут возникнуть при разработке.

Однако следует учитывать еще ряд нюансов. Во-первых, очевидно, что никто не гарантирует отсутствия «дырок» при автоматической генерации значений в столбце. А, во вторых, генерация нового значения для автоинкремента выполняется в не явной автономной транзакции. Это означает, что если сама по себе операция добавления записи не увенчается успехом, или транзакция, в которой будет производиться добавление, закончится отменой, то сервер следующее автоинкрементное значение сгенерирует так, как будто бы предыдущее добавление новой записи произошло успешно. И таким образом, образуется разрыв в автоматической нумерации.

-- начало транзакции со вставкой

BEGIN TRAN

INSERT INTO Ident_table (some_values) VALUES ('value 10')

-- откат, новая запись не добавляется

ROLLBACK

-- А здесь вставка «по честному»

INSERT INTO Ident_table (some_values) VALUES ('value 11')

-- Смотрим что получилось

SELECT * FROM Ident_table

--- результат:

ID some_values

К-во Просмотров: 405
Бесплатно скачать Реферат: К вопросу об идентификаторах