powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Продублировать значение триггером
6 сообщений из 6, страница 1 из 1
Продублировать значение триггером
    #39607128
TYMON
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Подскажите в чем может быть ошибка, или вообще может быть другое решение данной проблемы?

Имеются две таблицы products с полями (`product_id`, `name`, `count`) и products_categories (`product_id`,`category_id`,`product_ordering`). У поля products.`product_id` свойство AutoIncrement

Необходимо продублировать значение product_id из первой таблицы в поле product_id второй таблицы при каждом новом добавлении данных в первую.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DELIMITER $$
CREATE TRIGGER `add_products`
AFTER INSERT
ON `products` FOR EACH ROW
BEGIN
SET @new_id = (SELECT MAX(`product_id`) FROM `products`)
INSERT INTO `products_categories` (`product_id`,`category_id`,`product_ordering`)
VALUES (@new_id,'1','1')
END;
$$



Код на добавление триггера возвращает ошибку
#1064 - У вас ошибка в запросе около 'insert into `products_categories` (`product_id`,`category_id`' на строке
...
Рейтинг: 0 / 0
Продублировать значение триггером
    #39607140
TYMON
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот это запарился, точки с запятой надо проставить/убрать, может кому-то пригодится, код рабочий вроде

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DELIMITER $$
CREATE TRIGGER `add_products`
AFTER INSERT
ON `products` FOR EACH ROW
BEGIN
SET @new_id = (SELECT MAX(`product_id`) FROM `products`);
INSERT INTO `products_categories` (`product_id`,`category_id`,`product_ordering`)
VALUES (@new_id,'1','1');
END
$$
...
Рейтинг: 0 / 0
Продублировать значение триггером
    #39607143
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте INSERT .. SELECT. И псевдотаблицу NEW для получения product_id вставленной записи.
...
Рейтинг: 0 / 0
Продублировать значение триггером
    #39607144
TYMON
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос только, насколько быстро будет работать такой запрос при импорте 10000 значений?
...
Рейтинг: 0 / 0
Продублировать значение триггером
    #39607148
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё правильнее - реализовать логику вставки в формате хранимой процедуры, реализующей всю логику добавления и обработку возможных ошибок.
...
Рейтинг: 0 / 0
Продублировать значение триггером
    #39608146
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaЕщё правильнее - реализовать логику вставки в формате хранимой процедуры, реализующей всю логику добавления и обработку возможных ошибок.

у меня была похожая задача вставки с кучей FK - идея должна быть понятна

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
DELIMITER $$
CREATE FUNCTION get_r_id(p_datetime DATETIME, p_updated_by BIGINT(20)) RETURNS BIGINT(20)
DETERMINISTIC

BEGIN
	INSERT INTO revision (timestamp, updated_by) VALUES(p_datetime, p_updated_by);
		SET @new_revision_id = LAST_INSERT_ID();

	INSERT INTO revision_log (revision_id,migration,note) 	VALUES
		( @new_revision_id, 'fix 1', '22');

RETURN @new_revision_id;
END$$
DELIMITER ;

INSERT INTO product
	(id,
	revision_id,
...    )
SELECT
	id,
	get_r_id( UTC_TIMESTAMP(), 1),
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Продублировать значение триггером
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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