Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
15.02.2017, 14:13
|
|||
|---|---|---|---|
|
|||
триггер на автоинкремент в той же записи |
|||
|
#18+
Добрый день. Есть таблица с первичным ключом (автоинкремент) и вспомогательным ключом: Код: sql 1. 2. 3. 4. 5. 6. Есть задача: При вставке записи: - если 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, и вторым оператором модернизирую запись. Никто не подскажет здравый путь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2017, 14:36
|
|||
|---|---|---|---|
триггер на автоинкремент в той же записи |
|||
|
#18+
romtПока решил задачу варварским способом: в приложении делаю вставку, получаю ID, и вторым оператором модернизирую запись.Вполне нормальный путь, если нужно действительно отдельное поле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2017, 15:06
|
|||
|---|---|---|---|
|
|||
триггер на автоинкремент в той же записи |
|||
|
#18+
Нормальный, но: 1) В умных книжках пишут, что логика базы данных должна быть максимально в самой базе данных. Т.е. лучше максимально использовать триггеры и хранимые процедуры. Что и пытаюсь делать. А тут не выходит. 2) Запрос плюс триггер будут работать быстрее чем два запроса. (Или даже три запроса? Получение последнего ID - тоже запрос?) 3) Просто обидно: задачка-то вроде простая. А выходит, что не решается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2017, 15:23
|
|||
|---|---|---|---|
триггер на автоинкремент в той же записи |
|||
|
#18+
Логику такого уровня следует реализовывать в рамках хранимой процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=47&mobile=1&tid=1830907]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 364ms |

| 0 / 0 |
