Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / триггер на автоинкремент в той же записи / 5 сообщений из 5, страница 1 из 1
15.02.2017, 14:13
    #39404918
romt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер на автоинкремент в той же записи
Добрый день.

Есть таблица с первичным ключом (автоинкремент) и вспомогательным ключом:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE база1.таблица1 (
  ID int(11) NOT NULL AUTO_INCREMENT,
  IDbis int(11) DEFAULT NULL,
  // прочие неважные поля
  PRIMARY KEY (IDwt)
)



Есть задача:
При вставке записи:
- если IDbis задан - вносить его.
- если IDbis не задан - задать его равным сгенерированному ID.

Самый очевидный путь - поставить триггер. Триггер проверяет IDbis на NULL, и если да - присваивает IDbis=ID.

Но если триггер задать ДО вставки, он логично присваивает IDbis = 0 (значение ID ещё не сгенерировано),
а если триггер задать ПОСЛЕ вставки, то выдаётся ошибка: Can't update table 'таблица1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
То есть нельзя модифицировать вставляемую строку в момент самой вставки.

Пока решил задачу варварским способом: в приложении делаю вставку, получаю ID, и вторым оператором модернизирую запись. Никто не подскажет здравый путь?
...
Рейтинг: 0 / 0
15.02.2017, 14:36
    #39404948
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер на автоинкремент в той же записи
romtПока решил задачу варварским способом: в приложении делаю вставку, получаю ID, и вторым оператором модернизирую запись.Вполне нормальный путь, если нужно действительно отдельное поле.
...
Рейтинг: 0 / 0
15.02.2017, 15:06
    #39404983
romt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер на автоинкремент в той же записи
Нормальный, но:

1) В умных книжках пишут, что логика базы данных должна быть максимально в самой базе данных. Т.е. лучше максимально использовать триггеры и хранимые процедуры. Что и пытаюсь делать. А тут не выходит.

2) Запрос плюс триггер будут работать быстрее чем два запроса. (Или даже три запроса? Получение последнего ID - тоже запрос?)

3) Просто обидно: задачка-то вроде простая. А выходит, что не решается.
...
Рейтинг: 0 / 0
15.02.2017, 15:23
    #39405009
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер на автоинкремент в той же записи
Логику такого уровня следует реализовывать в рамках хранимой процедуры.
...
Рейтинг: 0 / 0
16.02.2017, 02:16
    #39405371
romt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер на автоинкремент в той же записи
Хорошо, будем юзать процедуры.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / триггер на автоинкремент в той же записи / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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