Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 1
Регистрация: 19.05.2015
Сообщений: 25

Удаление данных

26.03.2017, 02:00. Показов 2816. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, такой вопрос, у меня есть таблица (с "ID", он является ключом и так же авто инкремент).

Если я удаляю строку, с середины таблицы, то сбивается нумерация (к примеру если удалили вторую строку то нумерация будет 1,3 и тд).

Как сделать так, что бы при удаление строки, инкрементировалось по новой, что бы нумерация была правильная?

И еще такой вопрос, чтобы не плодить темы.

del
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.03.2017, 02:00
Ответы с готовыми решениями:

Создайте меню программы, состоящее из трех пунктов: удаление данных, добавление данных, просмотр данных
Создайте меню программы, состоящее из трех пунктов: удаление данных, добавление данных, просмотр данных. Программируйте запись текста в...

Удаление данных из трёх таблиц в базе данных Access
Здравствуйте! Я новичок в программировании. Делаю простенький психологический тест на C#. Столкнулся с таким препятствием. Мне нужно при...

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

12
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
26.03.2017, 09:12
Цитата Сообщение от Baffik4 Посмотреть сообщение
Как сделать так, что бы при удаление строки, инкрементировалось по новой, что бы нумерация была правильная?
во-первых никак. Во-вторых это ненужно. Когда вы создали запись, ей присвоился ID. Этот айди не должен меняться.

Возьмите свой пасспорт, там есть номер пасспорта. Это его ID. Представьте кто-то кто, получил пасспорт до вас - умер. Вам что теперь надо идти пасспорт менять? И всем кто после него получил тоже, потому что нумерация поменялась?

Цитата Сообщение от Baffik4 Посмотреть сообщение
И еще такой вопрос, чтобы не плодить темы.
см. правила. Один вопрос - одна тема.
2
0 / 0 / 1
Регистрация: 19.05.2015
Сообщений: 25
26.03.2017, 20:32  [ТС]
Насколько я вас понял, мне тогда нужно добавить еще 1 поле, которое будет ключем+АИ, и сделать колонку с ИД не ключевым, но АИ, и тогда мы сможем отредактировать?

Мы можем это сделать ALTER TABLE "имя таблици" АИ=1?

Или как нам тогда записать?
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
27.03.2017, 05:35
Ничего такого делать не надо, раз у тебя ИД порядковый, то проще всего делать сортировку по ИД и добавить в запрос rownum
1
614 / 488 / 175
Регистрация: 02.03.2010
Сообщений: 1,238
27.03.2017, 05:37
Цитата Сообщение от Baffik4 Посмотреть сообщение
Насколько я вас понял, мне тогда нужно добавить еще 1 поле, которое будет ключем+АИ, и сделать колонку с ИД не ключевым, но АИ, и тогда мы сможем отредактировать?
Для чего это все? Id - он на то и id, что это идентификатор, а не "порядковый номер" какой-нибудь. AI тоже не особо поможет в этой затее. С этим Ai много нюансов, которые вы, возможно не знаете (например, если попытаться добавить запись невалидную, она не добавится, а счетчик в поле с AI увеличится).
Вообще, есть такое понятие, как суррогатный ключ - это простой пример числового поля с AI, а есть натуральный ключ, так, если у записей в таблице можно выделить натуральный ключ, то лучше это сделать.
1
0 / 0 / 1
Регистрация: 19.05.2015
Сообщений: 25
28.03.2017, 17:41  [ТС]
Долго не отвечал, не было возможности.

Попробую объяснить всё по порядку.

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

Таблица групп, у меня состоит из 2 колонок:

id(PK, AI) Name
1 PR
2 SU
3 TAU

В одной из колонок "JtabedPanel", есть кнопки которые могут добавить, или удалить группу. Вывод таблицы организован на JTable. Удаление происходить по порядковому номеру "id". Я хочу сделать так, что бы

1) К примеру удаляем группу 2:

SQL
1
2
3
id Name
1 PR
3 TAU
Что бы, нумерация была не 1,3. А стала нормальная 1,2.

2) Что бы при удаление группы, удалялась вся информация по данной группе, к примеру, таблица с названием этой группы куда были записаны студенты.

Надеюсь я подробно объяснил, хотелось бы узнать как я могу такое сделать? Если не могу, то как я могу сообразить что-то подобное.

Я думал, что в таком случае мне нужно добавить еще 1 поле, которое будет уникальным идентификатором. И изменить поле которое будет просто вести нумерация количества предметов, и при удаление обнулить и заново проводить нумерацию.

Но, как я понял, вы говорите что это не лучшая идея.

П.С: Надеюсь я понятно объяснил.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
28.03.2017, 19:08
Цитата Сообщение от Baffik4 Посмотреть сообщение
Что бы, нумерация была не 1,3. А стала нормальная 1,2.
зачем?
1
0 / 0 / 1
Регистрация: 19.05.2015
Сообщений: 25
28.03.2017, 19:39  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
зачем?
Ну мне так хочется, что бы красиво было. Почему бы и нет.
Приятно когда предметы будут нумероваться 1,2,3 и тд. Чем 1,4,7,12,13,18 к примеру.

Мне просто не понятно, разве нельзя так делать или в чем проблема? Например как-то обнулить счетчик ИД, и что бы при каждой операций с этой таблицей, он проводил подсчёт заново и по порядку.
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
28.03.2017, 20:36
Цитата Сообщение от Baffik4 Посмотреть сообщение
Мне просто не понятно, разве нельзя так делать или в чем проблема? Например как-то обнулить счетчик ИД, и что бы при каждой операций с этой таблицей, он проводил подсчёт заново и по порядку.
я тебе уже отвечал:
Цитата Сообщение от LeX Посмотреть сообщение
добавить в запрос rownum
0
0 / 0 / 1
Регистрация: 19.05.2015
Сообщений: 25
28.03.2017, 22:00  [ТС]
Цитата Сообщение от LeX Посмотреть сообщение
я тебе уже отвечал:
Я просто не совсем понял ваш ответ.

Посмотрел, она - возвращает порядковый номер строки.

То есть если я правильно понимаю, нам просто нужно эту функцию применить к колонке "id" и она обнулит наши старые значение, или она просто сортирует их в определенном порядке?

SQL
1
2
3
4
5
6
7
SET @ROW_NUMBER = 0;
 
SELECT 
    (@ROW_NUMBER:=@ROW_NUMBER + 1) AS num, firstName, lastName
FROM
    employees
LIMIT 5;
Пример не совсем для джава, но в принципе суть, понятна.

Как мне задать @row_number для джава, это переменная которая уже исп. в запросах, ее не нужно объявлять? Или она обычна переменная Интового значения?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
29.03.2017, 09:17
Лучший ответ Сообщение было отмечено Baffik4 как решение

Решение

Цитата Сообщение от Baffik4 Посмотреть сообщение
То есть если я правильно понимаю, нам просто нужно эту функцию применить к колонке "id"
id колонки не меняется. Никогда. Выкиньте из головы эту идею.

Если есть трудности сделать счетчик в бд, проходите по результату в коде после того как уже принесли записи из БД и добавляйте к ним порядковые номера. ID оставьте в покое, он не для этого предназначен.
1
0 / 0 / 1
Регистрация: 19.05.2015
Сообщений: 25
31.03.2017, 00:26  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
id колонки не меняется. Никогда. Выкиньте из головы эту идею.
Извините за глупые вопроси, наверное я достал вас тупостью)

Но вот я сделал, таблицу в БД(скрин ниже), у меня поле (Индекс, АИ), оно прайм или обычное как счетчик? Если праим, тогда я не знаю как сделать счетчик.

C++
1
2
3
4
5
6
7
8
9
10
11
 удалитьButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String s = textField1.getText();
                updateQuery("DELETE from PR WHERE ID_PR = " + s+";");
               updateQuery("ALTER TABLE PR AUTO_INCREMENT=0;");
                int ROW_NUMBER = 0;
               //updateQuery( "SET " +ROW_NUMBER+ " SELECT (" +ROW_NUMBER+ " = " +ROW_NUMBER+ "+ 1 ) ID_PR, predmet_PR FROM PR)");
                System.out.println ("Запись удаленна");
            }
        });
Вот код который я написал, для удаления значения. С "ALTER TABLE" вроде ошибок нет, но оно ничего не хочет обнулять(как на скрине ниже).

Через "ROW_NUMBER" ругается на синтаксическую ошибку, как записать правильно я не знаю, да и поможет ли?

Просто много времени потратил, хотелось бы все таки понять и разобраться, но чувствую, что придется просто вывести название предметов без нумерации, и оставить так.

Просто, как я думаю, всегда стараются нумеровать количество, когда создают записи в таблице.
К примеру, когда есть таблица с работниками, и там удаляют одного человека, они же смещают порядковый номер работника на 1. Вот так бы и я хотел попробовать сделать.
Миниатюры
Удаление данных   Удаление данных  
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
31.03.2017, 01:04
Тебе кексоген написал же добавлять порядковый номер на джаве к результату твоего запроса. Что тебе еще надо?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.03.2017, 01:04
Помогаю со студенческими работами здесь

Добавление, изменение и удаление данных в базе данных
Методом научного тыка кое как подключил таблицу Microsoft Access с помощью datagrid вот только ни нашел ничего связанного с делфи или c++...

Поиск и удаление данных из XML базы данных
Есть база данных XML подобного толка <YourMusicLibrary> <Album> <Artist>Darkthrone</Artist> <Name>A Blaze in the...

Работа с базами данных,удаление данных
Функции function getAllGuestBookComment() { global $mysqli; connectDB(); $result_set = $mysqli->query("SELECT * FROM...

Создание временных данных в SQL с PHP или удаление данных из SQL по истечению времени
Пользователь вводит данные и они заносятся в SQL. Вопрос, как сделать, чтоб через, допустим, 10 мин удалялись эти данные? Добавлено...

Удаление данных из БД
Добрый день! Есть на данный момент две связанные таблицы: KliyentyQuery и PriyomQuery, ключевое поле Код_клиента Нужно сделать так...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru