[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: auto_increment
master812
Проблема такая. Есть таблица, в которой есть поле номер auto_increment. Если запрос на insert не срабатывает, то счетчик всеравно увеличивается на 1. Можно как-нибудь сделать, что бы если insert не срабатывал, счетчик оставался бы не измененным



Спустя 7 минут, 43 секунды (10.07.2009 - 08:26) sergeiss написал(а):
Нет, нельзя. Описанное поведение является для любого типа БД абсолютно логичным и единственно возможным.

Поясняю. Вот твой скрипт что-то делает, пытается вставить данные. Ты запросил новый идентификатор. Пока шла обработка, кто-то другой запустил другой скрипт, который быстренько отработал, и запросил тот же счетчик. Второму скрипту была выдана величина, на единицу больше, чем первому. Всё логично и понятно.
Но если в результате работы первого скрипта вставка данных не состоялась... Как счетчик останется неизменным? Он же уже изменился! Поэтому БД просто забывает про тот номер, с которым вставка данных не состоялась.
Всякие аргументы типа "ну это же единственный скрипт, и никто другой ничего не запустит" - это не аргументы smile.gif Потому что поведение БД разрабатывается для многопользовательских систем.

Спустя 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 миллиона. Да и пусть smile.gif

В чем проблему-то ты тут видишь?


Цитата (Guest @ 10.07.2009 - 10:03)
Просто нужно что бы номер очередной записи реально соответствовал количеству записей в таблице

Про эту идею надо забыть раз и навсегда!!! Потому что это сделать будет чрезвычайно сложно, а в сильнонагруженной системе, когда постоянно добавляются-удаляются записи, так и вообще нереально.

Спустя 6 минут, 35 секунд (10.07.2009 - 09:25) Guest написал(а):
Проблемы нет. Просто я думал что есть какой-то легкий способ. Спасибо за хорошую констультацию и потраченное на меня время!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.