2013-07-22 5 views
0

Если у меня есть база данных со следующей информацией, как я могу настроить свой следующий INSERT запрос, чтобы он был заполнен? (. Так что 5 в данном случае)MySQL вставить между ID

enter image description here

В принципе, как только он получает 24, он будет продолжать вставляя в порядке (например: 30,31,32)

+2

Ваша логика приложения должна ** НИКОГДА не полагаться на фактическое значение первичного ключа. Поэтому в основном вы должны заботиться о том, есть ли значение 5 или 555. – zerkms

+1

Авто- Клавиши incrememnt предназначены для обеспечения _uniqueness_, а не последовательности. Если вам нужно писать инкрементирующие числа в вашем коде приложения, сделайте это в своем цикле выборки. –

+0

Я не хочу, чтобы имя файла было чем-то экстремальным, например /files/uploads/57427689.jpg, если это время когда-либо наступит, и около 300 000 пустых/удаленных строк, которые он мог бы использовать вместо этого. – Kody

ответ

2

Вы надеваете» т. В любом случае не с автоматически увеличивающимся целым.

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

Зачем вам это нужно? Нет причин, чтобы целое число первичного ключа, созданное в базе данных, было таким смежным. Его цель - быть уникальной, и пока она служит этой цели, она работает. Нет необходимости «заполнять отверстия» слева от ранее удаленных записей.

Вы можете добавить в базу данных другой столбец и выполнить логику поиска следующего смежного номера при вставке записей в этот столбец. Но вы все равно столкнетесь с теми же вышеупомянутыми проблемами условий гонки и ненужной сложностью.

0

Вы можете просто дать ему я поле и значение

Вставить в таблицу (я бы, и т.д., и т.д.) значения (5, и т.д., и т.д.);

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

1

Измените свое имя на что-то более содержательное, чем идентификатор.

Я думаю, что-то вроде files/uploads/20130515_170349.wv (для первой строки) делает много смысла (если вы не имеете более одного файла в секунду.

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

Смежные вопросы