Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 01.04.2017
Сообщений: 15

При каких условиях если удалить запись, а потом создать, новая встанет на место удаленной?

03.11.2017, 19:05. Показов 913. Ответов 3
Метки sql (Все метки)

Студворк — интернет-сервис помощи студентам
Привет. Такая таблица: id(int, primary_key, AUTO_INCREMENT) и row_numb(int).
Дамп:

id row_numb
1 1
2 2
3 3

Удаляем id=2.
Вставляем insert (row_numb) values (4).

id row_numb
1 1
3 3
4 4

Что нужно сделать и при каких условиях новая запись ляжет на id=2

id row_numb
1 1
2 4
3 3
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.11.2017, 19:05
Ответы с готовыми решениями:

При каких условиях else может не выполняться, если условие в if ложно
А при каких условиях оператор условия else может не выполнятся, если условие в операторе if не верно У меня есть условие. И оно почему то...

New Ray() выдаёт null. При каких условиях?
Vec3 v = postopos * .25f + Position;// расстояние между 2 объектами + позиция 1 объекта + 0.25 Vec3 vv = obj.Position - v; Ray...

При каких условиях будут самодвойственны функции
Пусть f и g - самодвойственны. Выяснить, при каких условиях будут самодвойственны функции: 1) f ∨ g 2) f & g 3) f -> g

3
1234 / 424 / 107
Регистрация: 31.03.2012
Сообщений: 1,159
05.11.2017, 12:19
SQL
1
2
3
4
5
6
7
8
9
10
INSERT INTO ax(id, ch) VALUES (
    (SELECT -- выборка пропущеного ID
        a.id + 1
        FROM ax a
        WHERE (
            SELECT 1 FROM ax b WHERE b.id = (a.id + 1)
        ) IS NULL
        ORDER BY a.id LIMIT 1
    ), 'Новая запись'
);
И результат ниже
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
mysql> create table ax (
    ->   id int not null auto_increment,
    ->   ch char(20),
    ->   constraint pk_id primary key(id)
    -> ) engine = myisam default character set = cp1251;
Query OK, 0 rows affected (0.01 sec)
 
mysql> insert into ax(ch) values
    -> ('Значение'), 
    -> ('Значение'), 
    -> ('Удалить'),  -- id этой записи 3
    -> ('Удалить'), 
    -> ('Значение'), 
    -> ('Удалить'), 
    -> ('Значение'), 
    -> ('Значение'), 
    -> ('Удалить'), 
    -> ('Значение'), 
    -> ('Значение');
Query OK, 11 rows affected (0.02 sec)
Records: 11  Duplicates: 0  Warnings: 0
 
mysql> delete from ax where ch = 'Удалить';
Query OK, 4 rows affected (0.00 sec)
 
mysql> select * -- после удаления некоторых записей
    -> from ax order by id;
+----+----------+
| id | ch       |
+----+----------+
|  1 | Значение |
|  2 | Значение |
|  5 | Значение |
|  7 | Значение |
|  8 | Значение |
| 10 | Значение |
| 11 | Значение |
+----+----------+
7 rows in set (0.00 sec)
 
mysql> -- Будет вставлена запись (id=3, ch='Новая запись')
mysql> insert into ax(id, ch) values (
    ->  (select -- выборка пропущеного ID
    ->      a.id + 1
    ->      from ax a
    ->      where (
    ->          select 1 from ax b where b.id = (a.id + 1)
    ->      ) is null
    ->      order by a.id limit 1
    ->  ), 'Новая запись'
    -> );
Query OK, 1 row affected (0.00 sec)
 
mysql> select * -- после вставки одной записи с 
    -> from ax order by id;
+----+--------------+
| id | ch           |
+----+--------------+
|  1 | Значение     |
|  2 | Значение     |
|  3 | Новая запись |
|  5 | Значение     |
|  7 | Значение     |
|  8 | Значение     |
| 10 | Значение     |
| 11 | Значение     |
+----+--------------+
8 rows in set (0.00 sec)
1
0 / 0 / 0
Регистрация: 01.04.2017
Сообщений: 15
06.11.2017, 02:28  [ТС]
Спасибо. А на уровне СУБД можно как-то это реализовать? Например если выполнить optimized tabel или дефрагментацию?
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
07.11.2017, 11:02
Цитата Сообщение от tiguwedog
на уровне СУБД можно как-то это реализовать?
Выполняя подобные вещи на уровне СУБД, ты просадишь всю многопользовательскую работу. Поэтому на практике этим никто не занимается. Основное требование к PK - это уникальность, а отнюдь не отсутствие пропусков в нумерации.
0
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru