Реферат: К вопросу об идентификаторах
--- результат:
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
Бесплатно скачать Реферат: К вопросу об идентификаторах
|