powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Скрутить счетчик
24 сообщений из 24, страница 1 из 1
Скрутить счетчик
    #39026706
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Существует ли какая-нибудь автоматическая команда, которая скрутит счетчик автоиндекса до номера последней существующей в базе операции.

Например, в базе самая большая операция с порядковым номером 2315, а счетчик стоит, что следующий автоиндекс 46501. Есть ли какая-нибудь команда, которая автоматически скрутит этот счетчик, чтобы следующий индекс был бы 2316?
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39026715
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем?
впрочем, ответ - нет
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39026762
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да какое вообще твоё дело, что там пишет автоинкремент? оно не для тебя предназначено.
Нужна нумерация по порядку? создай для этого специальное поле и нумеруй записи программно.
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39026972
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старая шарманка :)
Ну ведь бывают же ситуации, когда автоинкрементные ключи решили показывать пользователю : номер заявки, номер транзакции. И невыгодно городить специальное поле и добиваться правильной его обработки в транзакциях.

Счетчик можно "скрутить" через alter table set auto_increment .
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39027022
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixЕсть ли какая-нибудь команда, которая автоматически скрутит этот счетчик, чтобы следующий индекс был бы 2316?
Рестарт сервера.
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39027147
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovLumixЕсть ли какая-нибудь команда, которая автоматически скрутит этот счетчик, чтобы следующий индекс был бы 2316?
Рестарт сервера.Это если InnoDB.

А без рестарта можно сделать ALTER TABLE ... AUTO_INCREMENT=12345
http://dev.mysql.com/doc/refman/5.5/en/alter-table.html To change the value of the AUTO_INCREMENT counter to be used for new rows, do this:

ALTER TABLE t2 AUTO_INCREMENT = value;

You cannot reset the counter to a value less than or equal to any that have already been used. For MyISAM, if the value is less than or equal to the maximum value currently in the AUTO_INCREMENT column, the value is reset to the current maximum plus one. For InnoDB, if the value is less than the current maximum value in the column, no error occurs and the current sequence value is not changed.
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39027197
Фотография Areostar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixСуществует ли какая-нибудь автоматическая команда, которая скрутит счетчик автоиндекса до номера последней существующей в базе операции.

Например, в базе самая большая операция с порядковым номером 2315, а счетчик стоит, что следующий автоиндекс 46501. Есть ли какая-нибудь команда, которая автоматически скрутит этот счетчик, чтобы следующий индекс был бы 2316?

а что это так критично!? Индексы обычно не используют иначе как для индификации строки!
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39027272
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AreostarИндексы обычно не используют иначе как для индификации строки!Ну только не индексы, а поле - синтетический первичный ключ. А так - да. И по большому счёту его значений ни видеть, ни тем более менять, не должен даже разработчик, не говоря уж о конечном пользователе.
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39027292
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaAreostarИндексы обычно не используют иначе как для индификации строки!Ну только не индексы, а поле - синтетический первичный ключ. А так - да. И по большому счёту его значений ни видеть, ни тем более менять, не должен даже разработчик, не говоря уж о конечном пользователе.
ну что значит нельзя ?
Да, есть некий антипаттерн - шаблон как делать не надо, чтобы не навлечь на себя бед. Люди заранее подумали и рекомендовали так не делать по разным причинам. А потом забыли почему. А некоторые даже и не знали.

Если разработчик полностью понимает риски, он в своем проекте волен делать что хочет.

Факт в том, что в mysql есть специальный оператор. Из песни слова не выкинешь.
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39027346
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netwindЕсли разработчик полностью понимает риски, он в своем проекте волен делать что хочет.C этим согласен. Но если квалификация разработчика такова, что он действительно понимает все риски, то гораздо более вероятно, что он всё-таки не полезет туда, куда не следует. Ибо возложение на одно поле двух назначений допустимо разве лишь в случае, когда эти назначения не могут конфликтовать даже теоретически. А поскольку раз в год и метла стреляет...
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39027400
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netwindЛюди заранее подумали и рекомендовали так не делать по разным причинам. А потом забыли почему. А некоторые даже и не знали.Войсковые уставы тоже не просто так писались. Можно долго рассуждать о полезности тех или иных требований, однако, сержант быстро и доходчиво разъяснит ситуацию.

netwindЕсли разработчик полностью понимает риски, он в своем проекте волен делать что хочет.Ну так и на красный можно ж проехать. И ездят. Иногда успешно, иногда не очень...

netwindФакт в том, что в mysql есть специальный оператор. Из песни слова не выкинешь.Более того, в дампы таблиц попадает значение автоинкремента. Чтобы на целевой базе, куда этот дамп будет разворачиваться, сделать "в точности так, как было". По моему скромному мнению это и есть основное назначение установки автоинкремента в какое-то определённое значение.
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39027473
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftDimitry Sibiryakovпропущено...

Рестарт сервера.Это если InnoDB.

А без рестарта можно сделать ALTER TABLE ... AUTO_INCREMENT=12345
http://dev.mysql.com/doc/refman/5.5/en/alter-table.html To change the value of the AUTO_INCREMENT counter to be used for new rows, do this:

ALTER TABLE t2 AUTO_INCREMENT = value;

You cannot reset the counter to a value less than or equal to any that have already been used. For MyISAM, if the value is less than or equal to the maximum value currently in the AUTO_INCREMENT column, the value is reset to the current maximum plus one. For InnoDB, if the value is less than the current maximum value in the column, no error occurs and the current sequence value is not changed.

miksoft, ЭТО ПРОСТО ОХРЕНИТЕЛЬНО!!!!!!!
Я только что проверил и действительно alter table t auto_increment = 1 ВСЕГДА СКРУЧИВАЕТ СЧЕТЧИК НА ТОТ САМЫЙ ВОЛШЕБНЫЙ НОМЕР, как я и хотел!!!! то есть самая старшая запись базе + 1.

ОГРОМНОЕ ВАМ СПАСИБО!!!!!!!! КРУТЯК!!

PS. немного стыдно, что сам не догадался просто в качестве эксперимента выполнить этот запрос с единичкой и посмотреть, что получится. Но в любом случае, главное, что теперь я знаю такое СУПЕР ЭЛЕГАНТНОЕ решение. ЕЩЁ РАЗ СПАСИБО!!!
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39027480
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixmiksoft, ЭТО ПРОСТО ОХРЕНИТЕЛЬНО!!!!!!!
Я только что проверил и действительно alter table t auto_increment = 1 ВСЕГДА СКРУЧИВАЕТ СЧЕТЧИК НА ТОТ САМЫЙ ВОЛШЕБНЫЙ НОМЕР, как я и хотел!!!! то есть самая старшая запись базе + 1.

теперь я знаю такое СУПЕР ЭЛЕГАНТНОЕ решение. ЕЩЁ РАЗ СПАСИБО!!!
И теперь каждый подключившийся юзер перед каждым инсертом будет радостно отправлять на обработку ALTER TABLE

Воистину КРУТЯК
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39027494
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixalter table t auto_increment = 1 ВСЕГДА СКРУЧИВАЕТ СЧЕТЧИК НА ТОТ САМЫЙ ВОЛШЕБНЫЙ НОМЕРНе советую на это полагаться. Однажды придется перейти на InnoDB, и этот фокус не сработает.
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39027497
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftLumixalter table t auto_increment = 1 ВСЕГДА СКРУЧИВАЕТ СЧЕТЧИК НА ТОТ САМЫЙ ВОЛШЕБНЫЙ НОМЕРНе советую на это полагаться. Однажды придется перейти на InnoDB, и этот фокус не сработает.

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

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

хотя чисто по логике вроде эта операция безобидная...
даже если не сработает, то как минимум она просто упадет с ошибкой
но база ведь не умрет...
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39027499
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixможет вы имеете ввиду, что на новых версиях иннодб это не работает??Прочитайте последнее предложение в моей цитате из доки.

Lumixу нас в продакшене стоят 5.0.27В доке для ветки 5.0. сформулировано чуть иначе, но суть та же. http://dev.mysql.com/doc/refman/5.0/en/alter-table.html For InnoDB, you can use ALTER TABLE ... AUTO_INCREMENT = value as of MySQL 5.0.3, but if the value is less than the current maximum value in the column, no error occurs and the current sequence value is not changed.

Кстати, весьма странный выбор версии. 9 лет уж скоро стукнет... Да и вся ветка давно уж не поддерживается.
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39027888
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftLumixможет вы имеете ввиду, что на новых версиях иннодб это не работает??Прочитайте последнее предложение в моей цитате из доки.

Lumixу нас в продакшене стоят 5.0.27В доке для ветки 5.0. сформулировано чуть иначе, но суть та же. http://dev.mysql.com/doc/refman/5.0/en/alter-table.html For InnoDB, you can use ALTER TABLE ... AUTO_INCREMENT = value as of MySQL 5.0.3, but if the value is less than the current maximum value in the column, no error occurs and the current sequence value is not changed.


Получается, что официальная дока ВРЕТ!!
(либо перед нами чудесное пасхальное яйцо...)

Потому что проделывая вот такой простой лабораторный тест мы получаем изменение автоиндекса в самое свежее значение.
Можете сами проделать все эти действия и убедиться, что все работает.


Код: sql
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.
create table if not exists t
    ( id int not null auto_increment, primary key(id) ) 
        engine = innodb default charset = utf8 auto_increment = 2631;
-- ok


show table status like 't'; 
-- Auto_increment = 2631
-- Rows = 0
-- Engine = InnoDb
-- Version = 10


insert into t values();
insert into t values();
insert into t values();
insert into t values();
-- ok


show table status like 't'; 
-- Auto_increment = 2635
-- Rows = 4


delete from t where id > 2632
-- 2 rows deleted


show table status like 't'; 
-- Auto_increment = 2635
-- Rows = 2


alter table t auto_increment = 1;
-- ok


show table status like 't'; 
-- Auto_increment = 2633
-- Rows = 2


drop table t;
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39027893
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix , если имеется не-FK ссылка на значение автоинкремента (поддержка кодом или на клиенте), то ресет значения автоинкремента может порождать всяческие несуразности - и не всегда безобидные...
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39027977
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina Lumix , если имеется не-FK ссылка на значение автоинкремента (поддержка кодом или на клиенте), то ресет значения автоинкремента может порождать всяческие несуразности - и не всегда безобидные...Почему? Если "имеется не-FK ссылка", то это значение, на которое ссылка, уже должно быть в таблице, а ниже него автоинкремент не сделается.
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39027982
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixПолучается, что официальная дока ВРЕТ!!
(либо перед нами чудесное пасхальное яйцо...)Вот только мы не знаем, в чем именно врет дока.
Возможно, документированный эффект начинается с более поздних версий. Например, не 5.0.3, а 5.0.37 (ну опечатались, забыли циферку). И тогда при смене версии MySQL (а она у вас уже давно просится) могут быть проблемы. Если не лень, то проделайте эксперимент на более современных версиях.

Кстати, у форков (которые уже идут штатно в ряде дистрибутивов Linux взамен MySQL) может быть своя точка зрения на все это.
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39028175
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftLumixПолучается, что официальная дока ВРЕТ!!
(либо перед нами чудесное пасхальное яйцо...)Вот только мы не знаем, в чем именно врет дока.
Возможно, документированный эффект начинается с более поздних версий. Например, не 5.0.3, а 5.0.37 (ну опечатались, забыли циферку). И тогда при смене версии MySQL (а она у вас уже давно просится) могут быть проблемы. Если не лень, то проделайте эксперимент на более современных версиях.

Кстати, у форков (которые уже идут штатно в ряде дистрибутивов Linux взамен MySQL) может быть своя точка зрения на все это.

из имеющихся реальных возможностей по-быстрому проверить, я смог провести эту лабораторную работу только на

Ось: Linux 3.10.76 (Gentoo 4.8.4)
Сервак: MariaDB
Версия сервера: 5.5.43-MariaDB - Source distribution
Версия протокола: 10
Кодировка сервера: UTF-8


Все работает как часы - счетчик успешно скручивается.
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39028226
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixиз имеющихся
С точки зрения программиста, нет никакого множества форков mysql.
Есть основная ветка и mariadb . Остальные не рискуют портить оптимизатор или модифицировать сам язык.
Все.
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39028286
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftAkina Lumix , если имеется не-FK ссылка на значение автоинкремента (поддержка кодом или на клиенте), то ресет значения автоинкремента может порождать всяческие несуразности - и не всегда безобидные...Почему? Если "имеется не-FK ссылка", то это значение, на которое ссылка, уже должно быть в таблице, а ниже него автоинкремент не сделается.
Я имею в виду случай, когда в таблице создана запись со значением АИ, равном некоему N, затем в зависимых, но не связанных внешним ключом, таблицах, создаётся референс на эту запись. Затем сама запись удаляется, а зависимые записи по неким причинам (сбой и т.п.) остаются. АИ ресетится, и через некоторое время снова создаётся запись с этим значением АИ. Что приводит к тому, что зависимые записи логикой приложения считаются связанными с этой новосозданной записью, что, само собой, неверно.
...
Рейтинг: 0 / 0
Скрутить счетчик
    #39028390
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinamiksoftпропущено...
Почему? Если "имеется не-FK ссылка", то это значение, на которое ссылка, уже должно быть в таблице, а ниже него автоинкремент не сделается.
Я имею в виду случай, когда в таблице создана запись со значением АИ, равном некоему N, затем в зависимых, но не связанных внешним ключом, таблицах, создаётся референс на эту запись. Затем сама запись удаляется, а зависимые записи по неким причинам (сбой и т.п.) остаются. АИ ресетится, и через некоторое время снова создаётся запись с этим значением АИ. Что приводит к тому, что зависимые записи логикой приложения считаются связанными с этой новосозданной записью, что, само собой, неверно.Ну если кто-то так будет делать, то он сам себе злобный буратино. Поскольку, если от ALTER TABLE уберечься еще как-то можно, то вот от рестарта базы не убережешься никак.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Скрутить счетчик
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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