powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / триггер на автоинкремент в той же записи
5 сообщений из 5, страница 1 из 1
триггер на автоинкремент в той же записи
    #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
триггер на автоинкремент в той же записи
    #39404948
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
romtПока решил задачу варварским способом: в приложении делаю вставку, получаю ID, и вторым оператором модернизирую запись.Вполне нормальный путь, если нужно действительно отдельное поле.
...
Рейтинг: 0 / 0
триггер на автоинкремент в той же записи
    #39404983
romt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нормальный, но:

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

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

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


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