2015-01-24 1 views
0

У меня есть таблица с основным ключом, которая принимает последовательное значение с помощью триггера.Когда нужно добавить Sequential Primary key? до или после вставки?

Какое время лучше всего добавить этот ключ?

до или после вставка?

+2

это может зависеть от других условий, но почти лучше быть в ** перед ** триггером, однако вы можете сделать это в после триггера, а затем обновить его, но это не рекомендуется – jfun

+0

Простите, это неправильно. ПОСЛЕ триггеров не могут изменить значение любых столбцов в таблице запуска. Для этой цели вы использовали бы только триггер BEFORE. –

ответ

2

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

+0

, если я использовал ** перед ** триггером и получил новое значение из последовательности перед вставкой, но окончательная транзакция была откатна, , тогда я потеряю последовательное значение из последовательности. Я не хочу, чтобы это случилось. – Nosairat

+3

Последовательности, как правило, не имеют пробелов в последовательности из-за описанных ситуаций. Есть ли причина, по которой вы не хотите, чтобы это произошло? Первичные ключи просто должны быть уникальными, а не последовательными. – Nick

+1

@Nosairat: нет абсолютно никакой возможности предотвратить «последовательные значения, потерянные во время отката». Не могу этого сделать. Покончи с этим. Значения из последовательности - это просто цифры. Скажи еще раз - они просто цифры. Они не имеют никакого значения. У них нет «духа» или «души» или чего-то еще. Это просто цифры. Они не «умирают», потому что транзакция откатывается. Они не живы. Это просто цифры. Вдохните - выдохните - двигайтесь дальше. –

0

Если вы вставляете запись в таблицу с первичным ключом, вам сразу же нужно будет указать уникальное значение ключа.

Смежные вопросы