Попытка вставить несколько строк с помощью триггера (при вставке) вызывает ошибки - PullRequest
0 голосов
/ 02 мая 2019

Попытка использовать триггер для вставки нескольких строк в таблицу (при вставке), но он работает только с одной строкой.Я получаю ошибку, возвращаемую из формы (ничего конкретного, только то, что произошла ошибка с оригинальной вставкой)

Работает нормально с 1 строкой, но с несколькими сбоями.Что не так с этим синтаксисом?

BEGIN
set @moonid = 1;
insert into quicknotedesc (custid,moonid) VALUES (New.id,(@moonid)),(New.id,(@moonid+1));
END

1 Ответ

1 голос
/ 02 мая 2019

Синтаксис тела триггера представляется действительным.

Практически в каждом клиенте SQL существует механизм для обнаружения состояния ошибки и получения сообщения об ошибке. Возможно, ошибка связана с попыткой нарушить уникальное ограничение для столбца custid в quicknotedesc или с каким-либо другим нарушением ограничения. Мы просто догадываемся.

Рассмотрите возможность включения клиента для получения фактического сообщения об ошибке. И попробуйте проверить поведение триггера от другого клиента, такого как клиент командной строки MySQL.


Опять же, чтобы ответить на заданный вопрос:

Синтаксис тела триггера представляется действительным.

Демонстрация:

CREATE TABLE quicknotedesc 
( custid  BIGINT UNSIGNED NOT NULL 
, moonid  BIGINT UNSIGNED NOT NULL
, PRIMARY KEY (custid, moonid)
);

CREATE TABLE foo
( id BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT 
);

DELIMITER $$

CREATE TRIGGER foo_ai
AFTER INSERT ON foo
FOR EACH ROW
BEGIN
  SET @moonid = 1;
  INSERT INTO quicknotedesc (custid,moonid) VALUES (New.id,(@moonid)),(New.id,(@moonid+1));
END$$

DELIMITER ;

INSERT INTO foo (id) VALUES (NULL) ;

1 row(s) affected

SELECT * FROM quicknotedesc ;

custid  moonid  
------  ------
     1       1
     1       2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...