![]() |
|
Модераторы: skyboy |
![]()
|
|
| PashaLost |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 18.1.2008 Репутация: нет Всего: нет |
Добрый день. Проектирую БД покерной статистики. Столкнулся со следующей проблемой:
При добавлении в БД триггеров (просто объявляем их существование и описываем тело) странные пируэты начинает вытворять автоинкремент. Опишу механизм действий: 1 Создаём скелет БД (пустые таблицы InnoDB + связи). 2 Наполняем БД первоначальными данными (т.н. справочники). 3 Добавляем в БД триггеры и пока их отключаем (именно в такой последовательности, сначала заполняем данные, потом триггеры) 4 Процедуры, функции, утилиты. Просматриваем справочники - в них всё красиво лежит. Включаем триггеры. Добавляем данные в справочник, триггер корректно срабатывает, но значение автоинкремента первичного ключа перепрыгивает предыдущее значение сразу вдвое( если было 2 - станет 4, было 4 - 8, было 10 - станет почемуто 16). Оно какбы не смертельно, но БД достаточно большая и хотелось бы деражать всё под контролем. В триггерах вызываются процедуры, а них активно используются курсоры. Весь прикол в том, что если в БД не добавлять триггеры на УДАЛЕНИЕ, то всё становится нормально. Замедте! Используем то мы триггеры на добавление. Вот такая каша. Может кто в курсе что происходит ? И ещё вопрос ... Существует ли возможность запустка SOURCE сразу пакетов sql файлов, причём в них указывать как просто SQL так и создание хранимых процедур и функций (на первой же хранимой процедуре кидает ошибку на синтаксис, хотя если просто скопипастить с СМД всё гуд) среда разработки NotePad++ и CMD Это сообщение отредактировал(а) PashaLost - 21.5.2012, 00:20 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
PashaLost, позвольте полюбопытчтвовать - а что собственно не нравится? автоинкремент обеспечил уникальность значений для каждой записи? всё, он выполнил то, что должен был. Ключ-автоинкремент существует только для организации связи между таблицами и поддержания целостности и непротиворечивости. Пользователю (в т.ч. разработчику) совать нос в его значения совершенно незачем.
А если нужно поле, где будут идти "номера по порядку" - заведите отдельное поле bigint, и заполняйте его из того же триггера. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| PashaLost |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 18.1.2008 Репутация: нет Всего: нет |
не нравится собственно то, что автоинкремент типа тиниинт (а это важно, нельзя использовать к примеру смолинт, т.к. ключ используется в другой таблице, которая имеет много записей, и объём данных при переходе с тини на смол резко увеличится), и если он вдруг переполнится, сами понимаете что. Если он будет так после каждого ДЕЛИТ ИНСЕРТА удваиваться, что тогда ?
|
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Нет, не понимаю. Если имеются ТАКИЕ ограничения - какие доводы привёл архитектор к тому, чтобы сделать данное поле автоинкрементным? Оно должно быть только уникальным и без-нулл-овым. А заполнение его неповторяющимися значениями должен обеспечить триггер. Я считаю, что это - ошибка проектирования. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 4 Всего: 42 |
Автоинкрементные значения обычно не предусматривают удаление. Вы конечно можете после каждого удаления делать http://dev.mysql.com/doc/refman/5.0/en/alter-table.html и менять текущее состояние автоинкремента. Но гарантии что все будет работать правильно - нет. Откровенно говоря не понятен смысл всех телодвижений. Можно чуть подробнее описать стоящую задачу? -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
| PashaLost |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 18.1.2008 Репутация: нет Всего: нет |
Я не удаляю автоинкрементные значения
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |