Спустя 7 минут, 43 секунды (10.07.2009 - 08:26) sergeiss написал(а):
Нет, нельзя. Описанное поведение является для любого типа БД абсолютно логичным и единственно возможным.
Поясняю. Вот твой скрипт что-то делает, пытается вставить данные. Ты запросил новый идентификатор. Пока шла обработка, кто-то другой запустил другой скрипт, который быстренько отработал, и запросил тот же счетчик. Второму скрипту была выдана величина, на единицу больше, чем первому. Всё логично и понятно.
Но если в результате работы первого скрипта вставка данных не состоялась... Как счетчик останется неизменным? Он же уже изменился! Поэтому БД просто забывает про тот номер, с которым вставка данных не состоялась.
Всякие аргументы типа "ну это же единственный скрипт, и никто другой ничего не запустит" - это не аргументы Потому что поведение БД разрабатывается для многопользовательских систем.
Поясняю. Вот твой скрипт что-то делает, пытается вставить данные. Ты запросил новый идентификатор. Пока шла обработка, кто-то другой запустил другой скрипт, который быстренько отработал, и запросил тот же счетчик. Второму скрипту была выдана величина, на единицу больше, чем первому. Всё логично и понятно.
Но если в результате работы первого скрипта вставка данных не состоялась... Как счетчик останется неизменным? Он же уже изменился! Поэтому БД просто забывает про тот номер, с которым вставка данных не состоялась.
Всякие аргументы типа "ну это же единственный скрипт, и никто другой ничего не запустит" - это не аргументы Потому что поведение БД разрабатывается для многопользовательских систем.
Спустя 7 минут, 27 секунд (10.07.2009 - 08:34) Guest написал(а):
Спасибо. А не подскажешь как тогда лучше вести нумерацию записей в БД?
Спустя 9 минут, 32 секунды (10.07.2009 - 08:43) sergeiss написал(а):
Дык...
Обычно вводится поле целого типа с автоувеличением. При вставке записи в это поле автоматически пишется очередное число. И потом ты можешь смело сортировать записи по этому полю.
Обычно вводится поле целого типа с автоувеличением. При вставке записи в это поле автоматически пишется очередное число. И потом ты можешь смело сортировать записи по этому полю.
Спустя 15 минут, 42 секунды (10.07.2009 - 08:59) Guest написал(а):
Так ведь может получиться что очередной номер записи например будет 1000, а реально в базе будет 500 записей. как быть?
Спустя 3 минуты, 42 секунды (10.07.2009 - 09:03) Guest написал(а):
Просто нужно что бы номер очередной записи реально соответствовал количеству записей в таблице
Спустя 15 минут, 27 секунд (10.07.2009 - 09:18) sergeiss написал(а):
Цитата (Guest @ 10.07.2009 - 09:59) |
Так ведь может получиться что очередной номер записи например будет 1000, а реально в базе будет 500 записей. как быть? |
Ну и будут пропуски номеров... И что из того? И пусть даже в таблице будет всего 3 записи, а очередной номер - 3 миллиона. Да и пусть
В чем проблему-то ты тут видишь?
Цитата (Guest @ 10.07.2009 - 10:03) |
Просто нужно что бы номер очередной записи реально соответствовал количеству записей в таблице |
Про эту идею надо забыть раз и навсегда!!! Потому что это сделать будет чрезвычайно сложно, а в сильнонагруженной системе, когда постоянно добавляются-удаляются записи, так и вообще нереально.
Спустя 6 минут, 35 секунд (10.07.2009 - 09:25) Guest написал(а):
Проблемы нет. Просто я думал что есть какой-то легкий способ. Спасибо за хорошую констультацию и потраченное на меня время!