Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Поиск несуществующего значения. (http://forum.oszone.net/showthread.php?t=108424)

DedAlex 04-06-2008 09:45 818027

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

vadimiron 04-06-2008 09:53 818033

DedAlex,
А может дать юазе самой об этом заботиться и воспользоваться полем, в котором автоматически будут генерироваться ID?
стать для размышления

DedAlex 04-06-2008 10:27 818051

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

Busla 04-06-2008 11:21 818089

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

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

vadimiron 04-06-2008 11:45 818114

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

DedAlex 04-06-2008 12:51 818149

Цитата:

Цитата Busla
Если "переписать сервер довольно проблематично", значит есть желание заполнять "дыры" исключительно вторым скриптом? »

Да, только вторым скриптом. Для него скорость работы не столь критична.
Цитата:

Цитата Busla
Как вариант - создать таблицу-пул пропусков и переписать второй скрипт, чтобы брал id оттуда. »

А можно поподробнее. Вы предлагаете изменить сервер, что бы он при удалении записи заносил "пустой" номер в другую таблицу?

Busla 04-06-2008 14:37 818214

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

DedAlex 04-06-2008 15:13 818233

Цитата:

Цитата Busla
DedAlex, а у вас удалением кривых записей занимается основной серверный скрипт? »

Это игровой сервер, и в результате такой ошибки получается что у человека оказывается другая вещь. Но с такой записью сервер прекрасно работает, ведь формат данных остается правильным, просто получается другой идентификатор.


Время: 19:39.

Время: 19:39.
© OSzone.net 2001-