Генерация уникального ID сдвиг при удалении - MySQL
Формулировка задачи:
Вот к примеру делаю такую таблицу:
Получиться табличка с автоматическим заполнением уникального ID. Как сделать, что бы при удалении какой нибудь строки в таблице, генератор автоматически переприсвоил уникальные ID.
Пример:
1 Вася
2 Петя
3 Жора
Удаляем Петю. Получаем:
1 Вася
3 Жора
А мне надо получить:
1 Вася
2 Жора
Заранее спасибо.
CREATE TABLE t401 (id MEDIUMINT NOT NULL AUTO_INCREMENT,surname char(20), name CHAR(20) ,patronymic char(20), primary key (id));
Решение задачи: «Генерация уникального ID сдвиг при удалении»
textual
Листинг программы
$i=$unikey; //позиция в которую вставляется строка
$res = $db->query("SELECT * FROM clietsbase " );
//увеличение всех номеров на единицу от вставляемого
while($row=$res->fetch_assoc()){
$j=$i+1;
$k=$i-1;
$result = $db->query ("UPDATE clietsbase SET unikey='$j',flag=1 WHERE unikey=$i and flag=0");
$result = $db->query ("UPDATE clietsbase SET unikey='$k',flag=0 WHERE unikey=$k and flag=1");
$i++;
}
$result = $db->query ("UPDATE clietsbase SET unikey='$k',flag=0 WHERE unikey=$k and flag=1");
//вставка строки на позицию куда хотели
$result = mysqli_query ($db, "INSERT INTO clietsbase (unikey,day,NameClient,Adress,Contakt) VALUES ('$unikey','$day','$NameClient','$Adress','$Contakt')");
Объяснение кода листинга программы
- В первую очередь, мы начинаем с переменной
$i, которая равна уникальному ключу (unikey). - Затем мы выполняем запрос SELECT, чтобы получить все строки из таблицы
clietsbase. - В то время как есть строки в результате запроса SELECT, мы увеличиваем значение
$iна 1. - Мы также сохраняем предыдущее значение
$iв переменной$k, чтобы использовать его позже. - Мы выполняем два запроса UPDATE: один для увеличения значения
unikeyна 1 для следующей строки после$iи установки флага на 1, а другой для уменьшения значенияunikeyна 1 для предыдущей строки после$iи установки флага на 0. - Мы увеличиваем значение
$iна 1 после каждого цикла, пока все строки не будут обработаны. - После того, как все строки были обработаны, мы выполняем последний запрос UPDATE, чтобы установить флаг на 0 для последней строки после
$i. - Наконец, мы выполняем запрос INSERT, чтобы вставить новую строку с данными клиента на позицию, определенную значением
$i. Список переменных и их значений: $i- уникальный ключ (unikey)$unikey- значение, которое мы хотим вставить вunikey$day- день$NameClient- имя клиента$Adress- адрес$Contakt- контактная информация$j- следующая позиция$k- предыдущая позиция$result- результат выполнения запроса$db- объект подключения к базе данных