Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как получить значение поля AutoIncrement в триггере? / 11 сообщений из 11, страница 1 из 1
10.11.2014, 01:45:54
    #38800178
Volk65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение поля AutoIncrement в триггере?
Есть таблица:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE DNC_PLUS.TRACKS (
  TRK_ID int(11) NOT NULL AUTO_INCREMENT,
  SORT_BY int(11) DEFAULT NULL,
  PRIMARY KEY (TRK_ID),
)
ENGINE = INNODB



Как должен выглядеть триггер, чтобы при вставке новой записи, в поле SORT_BY был скопирован новый уникальный TRK_ID.
Триггер AFTER выдает: Updating of NEW row is not allowed in after trigger​.
Триггер BEFORE: еще не имеет информации о новом ключе (TRK_ID).

Подскажите, как это можно реализовать.
...
Рейтинг: 0 / 0
10.11.2014, 04:55:08
    #38800197
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение поля AutoIncrement в триггере?
Volk65,

ну и стандартный вопрос - зачем вам дубль поля?
...
Рейтинг: 0 / 0
10.11.2014, 07:58:24
    #38800226
Volk65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение поля AutoIncrement в триггере?
Ну исходя из названия... Это значение поля будет меняться местами с предыдущей/следующей записью, и таким образом участвовать в действиях: переместить вверх/переместить вниз. Т.е. по этому полю будет производиться порядок вывода записей.
...
Рейтинг: 0 / 0
10.11.2014, 08:32:23
    #38800234
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение поля AutoIncrement в триггере?
Volk65Ну исходя из названия... Это значение поля будет меняться местами с предыдущей/следующей записью, и таким образом участвовать в действиях: переместить вверх/переместить вниз. Т.е. по этому полю будет производиться порядок вывода записей.
надо учить матчасть.
это поле для других целей.
если тебе надо произвольный порядок вывода(сортировки) заведи своё поле - в нём и устанавливай порядок отображения.
...
Рейтинг: 0 / 0
10.11.2014, 08:42:19
    #38800237
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение поля AutoIncrement в триггере?
вадя, ну какбэ ТС и завёл такое поле. Трудность только в записи туда "нужных" значений". Как обходной путь можно предложить, например, создать служебную таблицу с одним АИ полем, в бефоре инсерт триггере туда добавлять запись и выставлять сорт_бай=ласт_инсерт_ид.
...
Рейтинг: 0 / 0
10.11.2014, 08:44:25
    #38800240
Volk65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение поля AutoIncrement в триггере?
Так я и завел другое поле. Надо не учить матчасть, а внимательно смотреть первый пост.
Я повторю вопрос.
Как в триггере на INSERT переписать новое значение из поля TRK_ID (которое автоикремент) в поле SORT_BY ?
...
Рейтинг: 0 / 0
10.11.2014, 08:48:43
    #38800244
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение поля AutoIncrement в триггере?
Volk65, никак. По причинам, озвученным вами же в первом посте. Можно записать туда что-то другое.
...
Рейтинг: 0 / 0
10.11.2014, 08:49:43
    #38800247
Volk65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение поля AutoIncrement в триггере?
tanglirвадя, ну какбэ ТС и завёл такое поле. Трудность только в записи туда "нужных" значений". Как обходной путь можно предложить, например, создать служебную таблицу с одним АИ полем, в бефоре инсерт триггере туда добавлять запись и выставлять сорт_бай=ласт_инсерт_ид.

Ну да. Идея понятна. Через стороннюю таблицу. Скорее всего так и сделаю. Немного кривовато, конечно, но если нет другого способа...
Просто подумал, что можно по-простому:
Код: sql
1.
SET NEW.SORT_BY = NEW.TRK_ID
...
Рейтинг: 0 / 0
10.11.2014, 08:52:31
    #38800249
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение поля AutoIncrement в триггере?
Volk65но если нет другого способану, сиквенсов в мускле нет, только вот так эмулировать
...
Рейтинг: 0 / 0
10.11.2014, 10:03:53
    #38800314
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение поля AutoIncrement в триггере?
Можно сортировать так:
Код: sql
1.
ORDER BY IFNULL(SORT_BY,TRK_ID)

Правда, так не получится использовать для сортировки индекс. Но по моей практике это и так почти никогда не получается в более-менее сложных запросах.
...
Рейтинг: 0 / 0
10.11.2014, 10:09:05
    #38800321
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить значение поля AutoIncrement в триггере?
каюсь, слона не приметил.
но вместо триггера, для вставки можно использовать хранимку.
last insert id можно вставить куда угодно.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как получить значение поля AutoIncrement в триггере? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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