Рейтинг:
6
OriginalGriff
Не делайте этого сами, используйте личность. Я знаю, знаю, ты не хочешь , но это делает жизнь намного проще и безопаснее. Проблема в том, что SQL server и MySql - это многопользовательские системы, и если вы пытаетесь "сделать это сами", вы должны иметь в виду, что в любой момент другой пользователь также может попытаться увеличить одно и то же значение-если вы этого не сделаете, то вы начнете получать действительно неприятные прерывистые ошибки, которые почти невозможно обнаружить, не говоря уже о том, чтобы исправить!
Использование IDENTITY означает, что SQL работает за вас и обрабатывает все многопользовательские вещи прозрачно за кулисами.
И вы никогда не должны выбирать "следующее значение", потому что оно может быть недействительным, когда пользователь вставляет строку - предварительный выбор идентификаторов-это опасная вещь, и вы действительно можете испортить свою БД, если не будете очень-очень осторожны.
Member 12183079
не могли бы вы пожалуйста без использования identity как сделать инкремент так что пожалуйста помогите
Dave Kreskowiak
Это можно сделать, но не делается, потому что это плохо масштабируется. Это не просто "о, просто сделайте это в своем SP, и вы закончите". Это требует большого внимания к тому, что вы делаете, как вы это делаете, что происходит в случае отката, нескольких транзакций и блокировок, а также конфигурации базы данных для поддержки.
Это включает в себя блокировку всей таблицы. Это означает, что только один пользователь может делать что-либо с таблицей одновременно, включая запуск SELECT на ней. Пока таблица заблокирована для этого обновления, никто другой не может ее прочитать!
Если у вас 1000 одновременных пользователей, только один может коснуться стола одновременно. Остальные должны ждать, пока транзакция не будет зафиксирована и блокировки не будут сняты. Это то, что подразумевается под "Он плохо масштабируется".
PIEBALDconsult
Идентичность-это грязь. Никогда не используйте их.
С тех пор Microsoft научилась у Oracle и дала нам последовательности.