powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Primary key без auto-increment
10 сообщений из 10, страница 1 из 1
Primary key без auto-increment
    #38758303
Igor-Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,
Подскажите пожалуйста мне вот с такой ситуацией:
Делаю 2 таблички. Первая (о которой собственно и вопрос) это:
Player (id(primary), name, info). Вторая, предположим, Player_data в которой 1 поле берётся как foreign key из Player (как бы всё логично).
Так вот. У меня есть необходимость чтоб Player.name было unique - я это сделал.
И запрос на добавление выглядит следующим образом (с учётом что id стоит как auto increment):
Код: sql
1.
INSERT INTO player (name, info) VALUES ("player-name", "some info") ON DUPLICATE KEY UPDATE info = VALUES(info);


То есть, такой player в бд у меня один, и каждый раз проверяется и обновляется его info. Для первого получим id = 1.
Но получается так, что после кучи запросов с одинаковым игроком (а у меня так и есть) - когда вставляется следующий игрок, то его id уже выходит никак не "2", а допустим, "1000" - (это я понимаю как и почему). И меня это не устраивает.
То есть, я хочу сделать чтоб следующий добавился 100% с id = 2.
У меня была идея отключить auto increment и вручную выбирать max(id) + 1, но наверное так делать нельзя ?
Видел способ чтоб делать
Код: sql
1.
ALTER TABLE player AUTO_INCREMENT = 0;


но я думаю что это сильно затратно по ресурсам каждый раз перед каждым запросом ещё и это делать.
Как тогда быть ? Какие есть варианты ?
Заранее спасибо.
...
Рейтинг: 0 / 0
Primary key без auto-increment
    #38758321
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor-ZИ меня это не устраиваетпочему?

если вам нужна нумерация, делайте для неё поле
ПК не предназначен для пользовательской нумерации
...
Рейтинг: 0 / 0
Primary key без auto-increment
    #38758414
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor-Z,

вы объяснили все очень путанно и в итоге ничего не понятно.
Если хотите получить от меня ответ, то уберите из задачи формулировки, которые можно толковать множественными вариантами и добавьте конкретные данные для примера двух типов: какие данные есть, какие данные хотите получить.
В этом случае я смогу ответить на ваши вопросы.
...
Рейтинг: 0 / 0
Primary key без auto-increment
    #38758568
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подитожу предыдущих ораторов.

ТС, а зачем тебе нумерация подряд? вот у тебя номер телефона какой?
допустим 1234576 , добавь отними еденицу и позвони, скорей всего один из двух номеров будет не обслуживаться. и? кого это напрягает, что задействованные номера не попорятку?

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

а завтра зохочешь историю вести, и если юзер с айди 10 удалился, надо будет в таблицу истории добавить что был такой себе юзер вася с айди 10, и по этому айди ещо в других таблицах для маркетинга например по нему данные сохраняються. и что будешь делать? бежать на форум и спрашивать...хлопцы, я на който чорт мучался делал логику с непрерывным примари кеем, а теперь не знаю как быстро переделать!
...
Рейтинг: 0 / 0
Primary key без auto-increment
    #38758689
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixвы объяснили все очень путанно и в итоге ничего не понятно.Да всё понятно - ТСу хочется иметь свою непрерывную нумерацию. Он тут далеко не первый с этим вопросом, и все они получают один и тот же ответ - хочешь быть счастливым - будь им!иметь свою непрерывную нумерацию - делай её сам! И все её нюансы разруливай тоже сам.
alex564657498765453а завтра зохочешь историю вести, и если юзер с айди 10 удалился, надо будет в таблицу истории добавить что был такой себе юзер вася с айди 10, и по этому айди ещо в других таблицах для маркетинга например по нему данные сохраняються. и что будешь делать? бежать на форум и спрашивать...хлопцы, я на който чорт мучался делал логику с непрерывным примари кеем, а теперь не знаю как быстро переделать !Поставить ему признак "удалён"
Что, впрочем, не решит "проблему" с обломом вставок, например (потому что проблема не в обломе вставок, а в хотении странного, т.е. использовании автоинкремента для нумерации)
...
Рейтинг: 0 / 0
Primary key без auto-increment
    #38758737
Igor-Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirIgor-ZИ меня это не устраивает
почему?

Наверное, это главный вопрос. Да в принципе устраивает, но как-то глаз режет :)
Выходит так что планируется постоянный парсинг страницы с данными, и их занос в бд. И до того как туда попадёт следующий игрок, то его id может уже быть очень большим.
По большому счёту по-барабану. Но, вот думал, что можно сделать чтоб вести поле id аккуратнее, так сказать.
tanglirесли вам нужна нумерация, делайте для неё поле
ПК не предназначен для пользовательской нумерации
Делать нумерацию прям столбцом в бд ? А если не сложно, можно небольшой пример ? :) Спасибо.
ps - да и есть ли в этом смысл, можно, наверное, селектом при выводе добавлять нумерацию.
LumixIgor-Z,
вы объяснили все очень путанно и в итоге ничего не понятно.
Если хотите получить от меня ответ, то уберите из задачи формулировки, которые можно толковать множественными вариантами и добавьте конкретные данные для примера двух типов: какие данные есть, какие данные хотите получить.
В этом случае я смогу ответить на ваши вопросы.
Не думаю что был важен тип данных, скорее, как правильно заметили "id как для нумерации".
alex564657498765453а завтра зохочешь историю вести, и если юзер с айди 10 удалился, надо будет в таблицу истории добавить что был такой себе юзер вася с айди 10, и по этому айди ещо в других таблицах для маркетинга например по нему данные сохраняються.
Не совсем понял как одно связано с другим. Если id=10 удалится, то это же не значит что мы в будущем воспользуемся его номером 10 для новой записи. Хотя может быть и глупость говорю.
tanglirДа всё понятно - ТСу хочется иметь свою непрерывную нумерацию. Он тут далеко не первый с этим вопросом, и все они получают один и тот же ответ - хочешь быть счастливым - будь им!иметь свою непрерывную нумерацию - делай её сам! И все её нюансы разруливай тоже сам.
Всё верно говорите. Только вот теперь думаю "а имеет ли вся эта затея смысл" :)
...
Рейтинг: 0 / 0
Primary key без auto-increment
    #38758797
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor-Zps - да и есть ли в этом смысл, можно, наверное, селектом при выводе добавлять нумерацию.Ну так тем более - если устраивает нумерация "на лету" при выводе, зачем городить весь этот огород с последовательным ПК (ну или даже не ПК)?
Igor-ZНе совсем понял как одно связано с другим. Если id=10 удалится, то это же не значит что мы в будущем воспользуемся его номером 10 для новой записиУдалили пользователя с ид=10. А есть ещё юзеры с ид=11 и больше. Что делать с ними? Сдвигать вниз? - превед внешним ключам. Оставлять на месте? - а как же непрерывность?
Igor-ZТолько вот теперь думаю "а имеет ли вся эта затея смысл" :)Подумайте ещё вот над чем - автоинкремент работает так, как он работает вовсе не потому, что разрабы были ленивыми :)

ЗЫ. Впрочем, если у вас однопользовательская система, то можно и на автоинкременте сделать, только опять же зачем? Головной боли гораздо больше, чем преимуществ.
...
Рейтинг: 0 / 0
Primary key без auto-increment
    #38758868
Igor-Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirУдалили пользователя с ид=10. А есть ещё юзеры с ид=11 и больше. Что делать с ними? Сдвигать вниз? - превед внешним ключам. Оставлять на месте? - а как же непрерывность?
Нет, не предполагал сдвигать вниз, а то действительно получилось бы чёрт знает что.
Непрерывности бы конечно не получилось, но и разбега, всё таки, не было бы такого большого по значениям.
tanglirЗЫ. Впрочем, если у вас однопользовательская система, то можно и на автоинкременте сделать, только опять же зачем? Головной боли гораздо больше, чем преимуществ.
Ну а всё-же, если чисто теоретически, можно ли одним запросом, с учётом того, что id будет не авто, формировать запрос
вроде этого ?
Код: sql
1.
INSERT INTO player (id, name, info) VALUES (MAX(id), "player-name", "some info") ON DUPLICATE KEY UPDATE info = VALUES(info);


Я понимаю что я написал его с ошибкой, и он не выполнится из-за использования там MAX(id).
Либо только через 2 запроса - первым селектить max(id), а уже во второй запрос вставлять его значение + 1...
...
Рейтинг: 0 / 0
Primary key без auto-increment
    #38758932
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor-Ztanglirпропущено...

почему?

Наверное, это главный вопрос. Да в принципе устраивает, но как-то глаз режет :)
Выходит так что планируется постоянный парсинг страницы с данными, и их занос в бд. И до того как туда попадёт следующий игрок, то его id может уже быть очень большим.
По большому счёту по-барабану. Но, вот думал, что можно сделать чтоб вести поле id аккуратнее, так сказать.
tanglirесли вам нужна нумерация, делайте для неё поле
ПК не предназначен для пользовательской нумерации
Делать нумерацию прям столбцом в бд ? А если не сложно, можно небольшой пример ? :) Спасибо.
ps - да и есть ли в этом смысл, можно, наверное, селектом при выводе добавлять нумерацию.
LumixIgor-Z,
вы объяснили все очень путанно и в итоге ничего не понятно.
Если хотите получить от меня ответ, то уберите из задачи формулировки, которые можно толковать множественными вариантами и добавьте конкретные данные для примера двух типов: какие данные есть, какие данные хотите получить.
В этом случае я смогу ответить на ваши вопросы.
Не думаю что был важен тип данных, скорее, как правильно заметили "id как для нумерации".
alex564657498765453а завтра зохочешь историю вести, и если юзер с айди 10 удалился, надо будет в таблицу истории добавить что был такой себе юзер вася с айди 10, и по этому айди ещо в других таблицах для маркетинга например по нему данные сохраняються.
Не совсем понял как одно связано с другим. Если id=10 удалится, то это же не значит что мы в будущем воспользуемся его номером 10 для новой записи. Хотя может быть и глупость говорю.
tanglirДа всё понятно - ТСу хочется иметь свою непрерывную нумерацию. Он тут далеко не первый с этим вопросом, и все они получают один и тот же ответ - хочешь быть счастливым - будь им!иметь свою непрерывную нумерацию - делай её сам! И все её нюансы разруливай тоже сам.
Всё верно говорите. Только вот теперь думаю "а имеет ли вся эта затея смысл" :)

О...теперь ясно зачем ему непрерывная нумерация....:)

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

память пытался экономить, не создавая длинные ключи в асоциативных масивах...

я к тому, что такое бывает при смене языка програмирования, или типа задач, когда интуиция=Прежний_опыт+Старый_опыт выдаёт интуитивные мысли...вот по типу как ты сказал...большой айди глаза режет.

ЗЫ
у меня тоже кстате такое было когда впервые с базами начал работать.

счас изза махинаций при разработке, у меня вообще нумерация началась с нескольких милионов и ничо...
категории первые в системе остались с айди 20-30, а остальные уже удалены(постоянно создавались удалялись при разработке) и счас на продакшине нумерация началась с 300000
и ничо. нормально всё.
---
айди у меня кроме как для идентификации в базе не используеться нигде. юзер в ссылках видит совсем другое значение.

если ты просто не хотел чтобы в ссылках айдишники были большими, так заведи ещо одно поле(не переживай нащот экономии, у меня на 10комилионой таблице поле одно, которое ещо не используеться вообще, и ничо..живём )

я к тому что не пытайся сразу идиализировать и оптимизировать...сначала получи работающий код, потом сделаешь чтоб он работал правильно, потом без ошибок, и только потом будешь ускорять его... банальные слова, но чем лучше у человека логика(как в твоём случае) тем больше хочеться сразу про всё подумать... поверь опыту миксофта и других сдесь... забей на ПК, автоинкримент и нормально.
...
Рейтинг: 0 / 0
Primary key без auto-increment
    #38758951
Igor-Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё правильно говоришь :)
Сначала сделал рабочий код, потом начал все эти оптимизации по мелочам (полностью для себя, но всё же..) и в итоге так до "ввода в действие" всего проекта и не дошло :)
ps - просто добавлю, чтоб висело в теме: (был мой вопрос про чисто теоретически)
Оказывается, это можно сделать вот так (id без auto, по-дефолту 0)
Код: sql
1.
2.
3.
INSERT INTO player (id, name, info)
SELECT IFNULL(MAX(id), 0) + 1, "some-name", "some-info" FROM player 
ON DUPLICATE KEY UPDATE info = VALUES(info);


В любом случае всем спасибо за советы :)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Primary key без auto-increment
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]