download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

MySQL - Декрементиране на Auto Increment поле

Автор
Съобщение
programings
Нед, 31.03.13, 12:14
Имам едно Auto Increment поле в MySQL таблица, да речем с име post_id, което отговаря за id на даден пост в сайт.
Искам когато изтрия даден пост от сайта, то от post_id да се изважда съответно единица, така че да не се нарушава логично следващата подредбата от id-та на следващите пуснати постове.

Например:
Имам само един пост в сайта с id - 1. Решавам да изтрия този пост.
На сайта няма постове, но когато пусна нов пост, то той ще има id - 2, а не 1.

Как да декрементирам по някакъв начин това поле?

редактиран от programings на 31.03.13 12:15
insecteater
Нед, 31.03.13, 14:43
Защо държиш Id-тата ти да са последователни? Ако наистина ти е толкова важно, тогава ги управлявай ръчно (което е леко опасно, ако не го направиш както трябва), без да ползваш AUTO_INCREMENT.
По принцип щом задаваш поле да е AUTO_INCREMENT, то значи не съхраняваш толкова важни данни в него.

Слагаш полето на BIGINT UNSIGNED да речем, задаваш му AUTO_INCREMENT и забравяш за него, освен ако смяташ, че ще добавяш повече от 18446744073709551615 различни записа в тази таблица.

programings
Нед, 31.03.13, 15:01
По принцип не ми е толкова важно, просто ми стана интересно как може да се направи така, че да са последователни.

Мисля да си напиша алгоритъм, който да брои записите в таблицата, и според това да определя id за новият пост, вместо да използвам AUTO_INCREMENT.

insecteater
Пон, 01.04.13, 09:15
В твоя случай не те бърка, но по принцип не се прави така, понеже може да се изпадне в "състезателно" състояние. Представи си, че се подадат едновременно две заявки. И двете заявки ще получат едно и също максимално ID и ще се опитат да набутат нов запис с едно и също ново ID (предполагам, че ще ползваш нещо от сорта на MAX(post_id) + 1 ). Резултата е, че или ще имаш два реда с едно и също ID, или едната заявка ще се провали, поради дублиране на ID-та и ще трябва да се праща наново.
Толкова много ли ще триеш от последните ID-та? По принцип за да се избегнат такива неща се използват транзакции. Става дума за натоварени бази данни - в твоя случай, ще работи и така, както си го замислил.

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.