|
|
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
Существует ли какая-нибудь автоматическая команда, которая скрутит счетчик автоиндекса до номера последней существующей в базе операции. Например, в базе самая большая операция с порядковым номером 2315, а счетчик стоит, что следующий автоиндекс 46501. Есть ли какая-нибудь команда, которая автоматически скрутит этот счетчик, чтобы следующий индекс был бы 2316? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 01:07:38 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
зачем? впрочем, ответ - нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 06:08:00 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
Да какое вообще твоё дело, что там пишет автоинкремент? оно не для тебя предназначено. Нужна нумерация по порядку? создай для этого специальное поле и нумеруй записи программно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 08:59:22 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
Старая шарманка :) Ну ведь бывают же ситуации, когда автоинкрементные ключи решили показывать пользователю : номер заявки, номер транзакции. И невыгодно городить специальное поле и добиваться правильной его обработки в транзакциях. Счетчик можно "скрутить" через alter table set auto_increment . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 12:40:09 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
LumixЕсть ли какая-нибудь команда, которая автоматически скрутит этот счетчик, чтобы следующий индекс был бы 2316? Рестарт сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 13:47:17 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 15:50:20 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
LumixСуществует ли какая-нибудь автоматическая команда, которая скрутит счетчик автоиндекса до номера последней существующей в базе операции. Например, в базе самая большая операция с порядковым номером 2315, а счетчик стоит, что следующий автоиндекс 46501. Есть ли какая-нибудь команда, которая автоматически скрутит этот счетчик, чтобы следующий индекс был бы 2316? а что это так критично!? Индексы обычно не используют иначе как для индификации строки! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 16:39:58 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
AreostarИндексы обычно не используют иначе как для индификации строки!Ну только не индексы, а поле - синтетический первичный ключ. А так - да. И по большому счёту его значений ни видеть, ни тем более менять, не должен даже разработчик, не говоря уж о конечном пользователе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 17:25:49 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
AkinaAreostarИндексы обычно не используют иначе как для индификации строки!Ну только не индексы, а поле - синтетический первичный ключ. А так - да. И по большому счёту его значений ни видеть, ни тем более менять, не должен даже разработчик, не говоря уж о конечном пользователе. ну что значит нельзя ? Да, есть некий антипаттерн - шаблон как делать не надо, чтобы не навлечь на себя бед. Люди заранее подумали и рекомендовали так не делать по разным причинам. А потом забыли почему. А некоторые даже и не знали. Если разработчик полностью понимает риски, он в своем проекте волен делать что хочет. Факт в том, что в mysql есть специальный оператор. Из песни слова не выкинешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 17:37:23 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
netwindЕсли разработчик полностью понимает риски, он в своем проекте волен делать что хочет.C этим согласен. Но если квалификация разработчика такова, что он действительно понимает все риски, то гораздо более вероятно, что он всё-таки не полезет туда, куда не следует. Ибо возложение на одно поле двух назначений допустимо разве лишь в случае, когда эти назначения не могут конфликтовать даже теоретически. А поскольку раз в год и метла стреляет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 18:09:08 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
netwindЛюди заранее подумали и рекомендовали так не делать по разным причинам. А потом забыли почему. А некоторые даже и не знали.Войсковые уставы тоже не просто так писались. Можно долго рассуждать о полезности тех или иных требований, однако, сержант быстро и доходчиво разъяснит ситуацию. netwindЕсли разработчик полностью понимает риски, он в своем проекте волен делать что хочет.Ну так и на красный можно ж проехать. И ездят. Иногда успешно, иногда не очень... netwindФакт в том, что в mysql есть специальный оператор. Из песни слова не выкинешь.Более того, в дампы таблиц попадает значение автоинкремента. Чтобы на целевой базе, куда этот дамп будет разворачиваться, сделать "в точности так, как было". По моему скромному мнению это и есть основное назначение установки автоинкремента в какое-то определённое значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 18:48:46 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
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. немного стыдно, что сам не догадался просто в качестве эксперимента выполнить этот запрос с единичкой и посмотреть, что получится. Но в любом случае, главное, что теперь я знаю такое СУПЕР ЭЛЕГАНТНОЕ решение. ЕЩЁ РАЗ СПАСИБО!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 21:52:38 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
Lumixmiksoft, ЭТО ПРОСТО ОХРЕНИТЕЛЬНО!!!!!!! Я только что проверил и действительно alter table t auto_increment = 1 ВСЕГДА СКРУЧИВАЕТ СЧЕТЧИК НА ТОТ САМЫЙ ВОЛШЕБНЫЙ НОМЕР, как я и хотел!!!! то есть самая старшая запись базе + 1. теперь я знаю такое СУПЕР ЭЛЕГАНТНОЕ решение. ЕЩЁ РАЗ СПАСИБО!!! И теперь каждый подключившийся юзер перед каждым инсертом будет радостно отправлять на обработку ALTER TABLE Воистину КРУТЯК ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 22:18:52 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
Lumixalter table t auto_increment = 1 ВСЕГДА СКРУЧИВАЕТ СЧЕТЧИК НА ТОТ САМЫЙ ВОЛШЕБНЫЙ НОМЕРНе советую на это полагаться. Однажды придется перейти на InnoDB, и этот фокус не сработает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 23:14:26 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
miksoftLumixalter table t auto_increment = 1 ВСЕГДА СКРУЧИВАЕТ СЧЕТЧИК НА ТОТ САМЫЙ ВОЛШЕБНЫЙ НОМЕРНе советую на это полагаться. Однажды придется перейти на InnoDB, и этот фокус не сработает. не совсем понимаю о чем речь... уж третий год как мы делаем все проекты только на иннодб.... может вы имеете ввиду, что на новых версиях иннодб это не работает?? у нас в продакшене стоят 5.0.27 на них этот трюк работает мы уже час назад сдали это решение клиенту в эксплуатацию пока полет нормальный... хотя может завтра чё-нибудь вскроется))) хотя чисто по логике вроде эта операция безобидная... даже если не сработает, то как минимум она просто упадет с ошибкой но база ведь не умрет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 23:26:28 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
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 лет уж скоро стукнет... Да и вся ветка давно уж не поддерживается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 23:41:23 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 14:24:11 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
Lumix , если имеется не-FK ссылка на значение автоинкремента (поддержка кодом или на клиенте), то ресет значения автоинкремента может порождать всяческие несуразности - и не всегда безобидные... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 14:27:44 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
Akina Lumix , если имеется не-FK ссылка на значение автоинкремента (поддержка кодом или на клиенте), то ресет значения автоинкремента может порождать всяческие несуразности - и не всегда безобидные...Почему? Если "имеется не-FK ссылка", то это значение, на которое ссылка, уже должно быть в таблице, а ниже него автоинкремент не сделается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 15:41:02 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
LumixПолучается, что официальная дока ВРЕТ!! (либо перед нами чудесное пасхальное яйцо...)Вот только мы не знаем, в чем именно врет дока. Возможно, документированный эффект начинается с более поздних версий. Например, не 5.0.3, а 5.0.37 (ну опечатались, забыли циферку). И тогда при смене версии MySQL (а она у вас уже давно просится) могут быть проблемы. Если не лень, то проделайте эксперимент на более современных версиях. Кстати, у форков (которые уже идут штатно в ряде дистрибутивов Linux взамен MySQL) может быть своя точка зрения на все это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 15:48:03 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
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 Все работает как часы - счетчик успешно скручивается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 22:07:49 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
Lumixиз имеющихся С точки зрения программиста, нет никакого множества форков mysql. Есть основная ветка и mariadb . Остальные не рискуют портить оптимизатор или модифицировать сам язык. Все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 00:03:08 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
miksoftAkina Lumix , если имеется не-FK ссылка на значение автоинкремента (поддержка кодом или на клиенте), то ресет значения автоинкремента может порождать всяческие несуразности - и не всегда безобидные...Почему? Если "имеется не-FK ссылка", то это значение, на которое ссылка, уже должно быть в таблице, а ниже него автоинкремент не сделается. Я имею в виду случай, когда в таблице создана запись со значением АИ, равном некоему N, затем в зависимых, но не связанных внешним ключом, таблицах, создаётся референс на эту запись. Затем сама запись удаляется, а зависимые записи по неким причинам (сбой и т.п.) остаются. АИ ресетится, и через некоторое время снова создаётся запись с этим значением АИ. Что приводит к тому, что зависимые записи логикой приложения считаются связанными с этой новосозданной записью, что, само собой, неверно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 08:50:05 |
|
||
|
Скрутить счетчик
|
|||
|---|---|---|---|
|
#18+
Akinamiksoftпропущено... Почему? Если "имеется не-FK ссылка", то это значение, на которое ссылка, уже должно быть в таблице, а ниже него автоинкремент не сделается. Я имею в виду случай, когда в таблице создана запись со значением АИ, равном некоему N, затем в зависимых, но не связанных внешним ключом, таблицах, создаётся референс на эту запись. Затем сама запись удаляется, а зависимые записи по неким причинам (сбой и т.п.) остаются. АИ ресетится, и через некоторое время снова создаётся запись с этим значением АИ. Что приводит к тому, что зависимые записи логикой приложения считаются связанными с этой новосозданной записью, что, само собой, неверно.Ну если кто-то так будет делать, то он сам себе злобный буратино. Поскольку, если от ALTER TABLE уберечься еще как-то можно, то вот от рестарта базы не убережешься никак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 10:53:19 |
|
||
|
|

start [/forum/search_topic.php?author=Application&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 657ms |
| total: | 822ms |

| 0 / 0 |
