SQL: обходной путь функции «Нет удостоверений» с использованием триггеров

Я немного заржавел со своими триггерами, а что нет, и пытаюсь решить эту проблему для класса:

В базе данных TEST таблицы не имеют возможности функции IDENTITY. Другими словами, когда мы вставляем строку в таблицу «Пользователи», мы хотели бы, чтобы первичный ключ «Идентификатор пользователя» автоматически увеличивался. Пожалуйста, предложите обходной путь для реализации этой функции без такой встроенной функциональности. (Подсказка: вы по-прежнему можете использовать функции, хранимые процедуры, последовательности, триггеры и т. д.)


person Community    schedule 29.05.2009    source источник
comment
Как насчет добавления тега домашней работы?   -  person Mathias    schedule 29.05.2009


Ответы (2)


Используйте столбец Int для первичного ключа таблицы с именем ID.

Затем вы можете использовать вместо Insert Trigger, чтобы заполнить/вычислить значение, которое будет вставлено для ID.

Триггер определит максимальный существующий идентификатор для рассматриваемой таблицы (используя выбор MAX ID из таблицы A), а затем увеличит его на 1 для каждой вставляемой записи.

Если в таблице нет записей, значение идентификатора равно 1.

person John Sansom    schedule 29.05.2009
comment
Здесь важно отметить, что ваш режим изоляции транзакций здесь имеет решающее значение! Если вы используете обычный уровень изоляции READ COMMITTED, возможно, что два процесса могут генерировать один и тот же идентификатор, что действительно было бы Плохой вещью. Поэтому вам нужно будет использовать уровень изоляции SERIALIZABLE внутри триггера, иначе у вас могут возникнуть проблемы. Или, что еще лучше, вообще избегайте этого и используйте ИДЕНТИЧНОСТЬ ;-) - person Dave Markle; 29.05.2009

Вы используете последовательность, и это очень распространено в Oracle, который не имеет (или не один раз, возможно, изменился) столбцов идентификаторов. Поскольку это домашнее задание, я дам вам понять остальное отсюда.

person Joel Coehoorn    schedule 29.05.2009