Войти

Показать полную графическую версию : Поиск несуществующего значения.


DedAlex
04-06-2008, 09:45
Есть два скрипта которые работают с одной базой, и оба добавляют в нее записи. Точнее один - многопользовательский сервер. Он для скорости работы сначала делает запрос типа "SELECT MAX(id)", а потом INSERT, но между запросами проходит достаточно много времени и они со вторым скриптом бывает портят данные. Эти записи удаляются и остаются "дыры" в числовом ряду.
Можно ли найти эту "дыру" и записать данные в нее?

vadimiron
04-06-2008, 09:53
DedAlex,
А может дать юазе самой об этом заботиться и воспользоваться полем, в котором автоматически будут генерироваться ID?
стать для размышления (http://www.plus2net.com/asp-tutorial/sql-identity.php)

DedAlex
04-06-2008, 10:27
vadimiron, переписать сервер довольно проблематично, там эта вставка идет в нескольких местах. Он создавался для монопольного доступа к базе и не преполагает совместной работы (на запись) с другими программами. Вариант с блокированием базы (LOCK), тоже не помогает.

Busla
04-06-2008, 11:21
Если "переписать сервер довольно проблематично", значит есть желание заполнять "дыры" исключительно вторым скриптом?

Как вариант - создать таблицу-пул пропусков и переписать второй скрипт, чтобы брал id оттуда. Красивого (быстрого) решения найти имеющиеся пропуски нет, а на будущее надо так же переписать процедуру которая удаляет кривые записи, чтобы информация о них попадала в пул.

vadimiron
04-06-2008, 11:45
DedAlex,
Вообще можно, конечно, скриптом вытаскивать все значения и циклом проверять пустые значение, но естественно это не эффективно.
Я тоже за вариант, который предложит Busla

DedAlex
04-06-2008, 12:51
Если "переписать сервер довольно проблематично", значит есть желание заполнять "дыры" исключительно вторым скриптом? »
Да, только вторым скриптом. Для него скорость работы не столь критична.Как вариант - создать таблицу-пул пропусков и переписать второй скрипт, чтобы брал id оттуда. » А можно поподробнее. Вы предлагаете изменить сервер, что бы он при удалении записи заносил "пустой" номер в другую таблицу?

Busla
04-06-2008, 14:37
DedAlex, а у вас удалением кривых записей занимается основной серверный скрипт? - он разве в состоянии делать это корректно? - как я понял из описания, для него это - совершенно нештатная ситуация.

DedAlex
04-06-2008, 15:13
DedAlex, а у вас удалением кривых записей занимается основной серверный скрипт? » Это игровой сервер, и в результате такой ошибки получается что у человека оказывается другая вещь. Но с такой записью сервер прекрасно работает, ведь формат данных остается правильным, просто получается другой идентификатор.




© OSzone.net 2001-2012